排名
1
文章
860
粉丝
112
评论
163
.net core自定义项目模板,创建自己的模板项目,使用命令行创建模板项目
尘叶心繁 : 可以可以讲真的我都想弄个模板
net core webapi post传递参数
庸人 :
确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 : 已精
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 :
疯狂反射
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

使用反射检查ef中某个字段是否是主键,使用如下代码即可
- //检测当前字段是否是主键
- var keys = userm.Property(item.Name).Metadata.GetType().GetProperty("Keys");
- object value = keys.GetValue(userm.Property(item.Name).Metadata);
可以用于在封装不需要查询直接更新的时候用,因为如果是主键设置IsModified=true就会报错
完整一点的代码:
- public int Update<T>(T t) where T : class
- {
- var userm = efcontext.Entry<T>(t);
- //把user对象加入上下文,但是没有改变
- userm.State = Microsoft.EntityFrameworkCore.EntityState.Unchanged;
- //使用反射找到不为空的字段
- foreach (var item in t.GetType().GetProperties())
- {
- //虚拟属性是导航属性
- if (item.GetMethod.IsVirtual)
- {
- continue;
- }
- //拿到属性值
- object obj = item.GetValue(t);
- if (obj != null)
- {
- //检测当前字段是否是主键
- var keys = userm.Property(item.Name).Metadata.GetType().GetProperty("Keys");
- object value = keys.GetValue(userm.Property(item.Name).Metadata);
- //不是主键才去修改,如果是主键就不需要修改了
- if (value == null)
- {
- //表示该字段需要更新
- userm.Property(item.Name).IsModified = true;
- }
- }
- }
- return efcontext.SaveChanges();
- }
其实可以多传递一个忽略的字段比如主键,不然的话,每次去反射检查很浪费效率的还不如重新查询一次了
- public int Update<T>(T t, string keyName) where T : class
- {
- var userm = efcontext.Entry<T>(t);
- //把user对象加入上下文,但是没有改变
- userm.State = Microsoft.EntityFrameworkCore.EntityState.Unchanged;
- //使用反射找到不为空的字段
- foreach (var item in t.GetType().GetProperties())
- {
- //虚拟属性是导航属性
- if (item.GetMethod.IsVirtual)
- {
- continue;
- }
- //拿到属性值
- object obj = item.GetValue(t);
- if (obj != null)
- {
- //不是主键才去修改,如果是主键就不需要修改了
- if (item.Name != keyName)
- {
- //表示该字段需要更新
- userm.Property(item.Name).IsModified = true;
- }
- }
- }
- return efcontext.SaveChanges();
- }
使用的时候这样既可:
- public int UpdateAtricle(Article article)
- {
- return _efHelper.Update(article, "Id");
- }
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价