這是一個古老的線程,但如果有人有興趣,對拉迪斯拉夫的解決方案擴展了,我們「已經想出了一個有用的擴展方法用於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