EF 有一个对象数据更改跟踪器。通过代理启用跟踪 Poco 条目的变化 http://msdn.microsoft.com/en-us/library/vstudio/dd456848%28v=vs.100%29.aspx
本质上,您/发现首先读取对象/Poco 实体。
仅更改您想要的属性。并保存。
仅更新更改的属性。
如果您不使用自动 DetectChanges
this.Configuration.AutoDetectChangesEnabled = false; ////<<<<<<<<< Default true
然后您可以在保存之前调用“检测更改”。
但无论哪种方式,这个概念都是基于先读以获得实体。
进行必要的更改并保存。
仅实际更改会发送回 Db。
例如:
var mypoco = Context.Set<TPoco>.Find(1);
myPoco.propertyXyz = "changed";
// normally not required by default, But incase your are not using tracking proxies , tell ef heads Up
// Context.Context.ChangeTracker.DetectChanges(); // uncomment when needed
Context.SaveChanged();
只有实际更改才会发送到数据库。
虽然 Rameez 的 POST 是正确的,但它没有说明为什么需要将整个条目设置为已更改,也没有说明为什么要这样做?为什么要从文档中链接州入境职位?
Context.Entry(poco).State = state; // why do this ? or the objectContext equivalent
这将导致所有值的更新集在 SaveChanges 时进入数据库
因为所有字段都将被视为已更改。这不是使用 EF 的好方法。
了解 EF 中的自动检测更改非常重要。
看自动检测变化 http://msdn.microsoft.com/en-us/data/jj556205
and 实体状态和 SaveChanges http://msdn.microsoft.com/en-us/data/jj592676