EF指定更新字段,强类型,有提示
2011-10-09 17:39
423 查看
在不同的ObjectContext中,通过Attach的方式更新数据,会默认更新所有字段
可以使用
如果要写通用的EF update操作,传递expression集合,这个时候第二个泛型参数不确定,如果用object的话,对int,bool等类型会进行convert操作。
lambda表达式类型是Convert,而不是MemberAccess
此时需要额外操作
通过调试发现,当lambda类型是Convert的时候,expression的body是一个UnaryExpression类型
通过UnaryExpression.Operand可以获取到他真实的expression,此expression是一个MemberExpression,通过MemberExpression.Member.Name就可以获取到参数的值了。
mvc的ExpressionHelper只提供传入lambdaexpression参数的方法,不提供传入UnaryExpression所以要自己写一下。ExpressionHelper是静态类,里面是都是静态方法,用扩展方法是扩展不进去的。只能自己随便找个地方写写了
通过更新方法操作类似于
可以使用
ObjectStateEntry.SetModifiedProperty("...")来指定更新某些字段
具体可见文章
但是字符串传递的方式不爽,还区分大小写。
可以用MVC提供的ExpressionHelper类解析lambda表达式,获取属性名
1: public static void SetModifiedProperty<TModel, TProperty>(this ObjectStateEntry entry, Expression<Func<TModel, TProperty>> expression)
2: {
3: entry.SetModifiedProperty(ExpressionHelper.GetExpressionText(expression));
4: }
如果要写通用的EF update操作,传递expression集合,这个时候第二个泛型参数不确定,如果用object的话,对int,bool等类型会进行convert操作。
lambda表达式类型是Convert,而不是MemberAccess
此时需要额外操作
通过调试发现,当lambda类型是Convert的时候,expression的body是一个UnaryExpression类型
通过UnaryExpression.Operand可以获取到他真实的expression,此expression是一个MemberExpression,通过MemberExpression.Member.Name就可以获取到参数的值了。
mvc的ExpressionHelper只提供传入lambdaexpression参数的方法,不提供传入UnaryExpression所以要自己写一下。ExpressionHelper是静态类,里面是都是静态方法,用扩展方法是扩展不进去的。只能自己随便找个地方写写了
1: public static string GetExpressionText(UnaryExpression exp)
2: {
3: if (exp != null)
4: {
5: if (exp.Operand.NodeType == ExpressionType.MemberAccess)
6: {
7: MemberExpression memExp = exp.Operand as MemberExpression;
8: if (memExp != null)
9: {
10: return memExp.Member.Name;
11: }
12: }
13: }
14: return string.Empty;
15: }
通过更新方法操作类似于
public static void Update<TEntity>(TEntity obj, params Expression<Func<TEntity,object>>[] updateProperties) where TEntity : EntityObject
相关文章推荐
- 更新数据库所有表的某一个指定字段 ,附加对‘将 varchar 值转换为数据类型为 int 的列时发生语法错误’处理方法
- 开发笔记:基于EntityFramework.Extended用EF实现指定字段的更新
- EF扩展 更新指定字段
- EF调用存储过程查询表中的部分字段,报数据读取器与指定的“AdventureWorksDWModel.Student”不兼容。某个类型为“Age”的成员在同名的数据读取器中没有对应的列。
- EF更新指定的字段
- EF中更新指定字段
- EF更新指定字段...
- EF 更新指定的字段
- Unknown fieldType 'float' specified on field 字段中指定了未知的字段类型'float'
- solrJ 1、批量更新数据时,会有部分数据没有更新上, 2.排序时使用整型、数字型字段,不要使用字符串类型
- Mysql 更新字段类型异常处理:ERROR 1265 (01000): Data truncated for column 'xxx' at row 1
- 导入文本文件时如何指定字段类型?(一)
- 【EF】数据表全部字段更新与部分字段更新
- oracle 更新字段为null hibernate 报错 类型不存在 16 invalid column type 16
- SQL脚本获取指定SQLServer数据库所有表及视图的字段列表及类型、长度
- 表中有大字段X(例如:text类型),且字段X不会经常更新,怎么办?
- 新问题新方法:在Entity Framework中实现指定字段更新
- db2 9.5 ,将字符串类型字段更新为date类型失败
- EF 只更新部分字段
- 查询在指定的数据库中所有的表名和每个表的字段名及字段类型