这是一个古老的线程,但如果有人有兴趣,对拉迪斯拉夫的解决方案扩展了,我们“已经想出了一个有用的扩展方法用于EF 4.1和更高版本:
public static void SetModified<TEntity>(
this DbEntityEntry<TEntity> entry,
IEnumerable<Expression<Func<TEntity, object>>> expressions) where TEntity : class, IEntity
{
foreach (var expression in expressions)
entry.Property(expression).IsModified = true;
}
显然ÿ你需要除去IEntity约束,除非你为你的POCO使用同一个接口。
使用例子是:
var user = new User
{
Id = Request.Id,
UserName = Request.UserName,
FirstName = Request.FirstName
};
var expressions = new List<Expression<Func<User, object>>>
{
x => x.UserName,
x => x.FirstName
};
context.Entry(user).SetModified(expressions);
喔确定或编写SQL查询来更新,不是吗?或者编写一个通用的帮助器来标记已编辑的属性,humm ...这就是TryUpdate必须做的事情。 – Milan 2012-03-22 11:12:41
EF 4.0中不存在Entry()。 – Suncat2000 2013-05-22 16:01:50
@ Suncat2000:第二个例子适用于EF 4.0,第一个例子适用于EF 4.1和更高版本。 – 2013-05-22 18:45:54