将分离的实体保存在entity framework6中
我已经阅读了很多关于在Entity Framework中保存分离实体的文章。 他们都似乎适用于旧版本的entity framework。 他们引用的方法,如ApplyCurrentValues和ChangeObjectState似乎并不存在。 一时兴起,我决定尝试一种我通过intellisensefind的方法,我想确保这是做这件事的正确方法,因为我不明白幕后发生了什么:
public void SaveOrder(Order order) { using (VirtualWebEntities db = new VirtualWebEntities()) { db.Orders.Attach(order); db.Entry(order).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } }
这是更新已更改的现有项目的正确方法吗?
是的,这是正确的。 本文介绍添加和附加实体的各种方法 ,并提供了此示例:
var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" }; using (var context = new BloggingContext()) { // The next step implicitly attaches the entity context.Entry(existingBlog).State = EntityState.Modified; // Do some more work... context.SaveChanges(); }
由于EF不知道哪些属性与数据库中的属性不同,因此它将全部更新它们:
将状态更改为“已修改”时,实体的所有属性将被标记为已修改,并且在调用SaveChanges时将所有属性值发送到数据库。
为了避免这种情况,您可以设置手动修改哪些属性,而不是设置整个实体状态:
using (var context = new BloggingContext()) { var blog = context.Blogs.Find(1); context.Entry(blog).Property(u => u.Name).IsModified = true; // Use a string for the property name context.Entry(blog).Property("Name").IsModified = true; }