我一直在探索不同的编辑/更新一条记录的方法在 Entity Framework 5在一个 ASP.NET MVC3环境,但到目前为止没有一个刻度不要放过任何我需要的。 我解释为什么。
我发现了三种方法,我将提到它们的优缺点:
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();
}
- 可以指定哪些属性更改
- 视图不需要包含每个属性
Cons
- 2 对数据库进行查询以加载原始数据,然后更新它
方法 2 变化- 加载原始记录,集中值
var original = db.Users.Find(updatedUser.UserId);
if (original!= null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
- 只将修改后的属性发送到数据库
Cons
- 视图需要包含每个属性
- 2 对数据库进行查询以加载原始数据,然后更新它
3 方法- 将更新后的记录,并设置状态附加到 EntityState.Modified
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
- 1 在数据库上查询以更新
Cons
- 无法指定哪些属性更改
- 视图必须包含每个属性
问题
我给你们的问题是,有一种干净的方法来实现这一套目标?
- 可以指定哪些属性更改
- 视图不需要包含每个属性( 如密码) !
- 1 在数据库上查询以更新
我理解这是一个很小的问题,但是我可能缺少一个简单的解决方案。 如果不是方法,则优先使用- )