我一直在探索在 ASP.NET MVC3 环境中编辑/更新 Entity Framework 5 中的记录的不同方法,但到目前为止,没有一种方法满足我需要的所有条件。我会解释原因。
我发现了三种方法,我将提及它们的优缺点:
方法1 - 加载原始记录,更新每个属性
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
original.BusinessEntityId = updatedUser.BusinessEntityId;
original.Email = updatedUser.Email;
original.EmployeeId = updatedUser.EmployeeId;
original.Forename = updatedUser.Forename;
original.Surname = updatedUser.Surname;
original.Telephone = updatedUser.Telephone;
original.Title = updatedUser.Title;
original.Fax = updatedUser.Fax;
original.ASPNetUserId = updatedUser.ASPNetUserId;
db.SaveChanges();
}
Pros
Cons
方法 2 - 加载原始记录,设置更改的值
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
Pros
Cons
- 视图需要包含每个属性
- 对数据库进行 2 次查询以加载原始数据然后更新它
方法 3 - 附加更新的记录并将状态设置为 EntityState.Modified
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Pros
Cons
Question
我问你们的问题;有没有一种干净的方法可以实现这组目标?
- 可以指定哪些属性发生变化
- 视图不需要包含每个属性(例如密码!)
- 1 x 查询数据库以更新
我知道这是一件值得指出的小事,但我可能缺少一个简单的解决方案。如果不是,则以方法一为准;-)
您正在寻找:
db.Users.Attach(updatedUser);
var entry = db.Entry(updatedUser);
entry.Property(e => e.Email).IsModified = true;
// other changed properties
db.SaveChanges();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)