实体框架5更新记录 [英] Entity Framework 5 Updating a Record
问题描述
我一直在探索的编辑不同的方法/在ASP.NET MVC3环境实体框架5的内部更新记录,但到目前为止,他们没有勾选所有我需要的箱子。我会解释为什么。
I have been exploring different methods of editing/updating a record within Entity Framework 5 in an ASP.NET MVC3 environment, but so far none of them tick all of the boxes I need. I'll explain why.
我发现三种方法,我会提到的利弊:
I have found three methods to which I'll mention the pros and cons:
方法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();
}
的赞成的
- 可以指定哪些属性来更改
- 视图并不需要包含每个属性
的缺点的
- 2×查询数据库装入原然后更新
方法2 - 加载原始记录,设置更改后的值
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
的赞成的
- 只有修改的属性将被发送到数据库
的缺点的
- 正文需要包含每个属性
- 2×查询数据库装入原然后更新
方法3 - 安装更新的记录,并设置状态EntityState.Modified
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
的赞成的
- 1个查询来更新
数据库
的缺点的
- 不能指定哪些属性更改
- 正文必须包含每个属性
问
我的问题你们;有没有干净的方式,我可以做到这一点的一套目标?
My question to you guys; is there a clean way that I can achieve this set of goals?
- 可以指定哪些属性来更改
- 视图并不需要包含每个属性(如密码!)
- 1个查询来更新
数据库
我明白这是一个相当次要的事情指出,但我可能会丢失一个简单的解决了这一点。如果没有方法一会prevail; - )
I understand this is quite a minor thing to point out but I may be missing a simple solution to this. If not method one will prevail ;-)
推荐答案
您正在寻找的:
db.Users.Attach(updatedUser);
var entry = db.Entry(updatedUser);
entry.Property(e => e.Email).IsModified = true;
// other changed properties
db.SaveChanges();
这篇关于实体框架5更新记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!