属性“waitingInvoiceAmount”是对象的一部分,不能被修改

来源:互联网 发布:html中调用javascript 编辑:程序博客网 时间:2024/06/08 13:25

最近用实体框架遇到的一个问题: 英文系统提示The property ‘WaitingInvoiceAmount' is part of the object's key information and cannot be modified或

中文系统提示:属性“waitingInvoiceAmount”是对象的一部分,不能被修改,

真是郁闷我了大半年啊,今天终于有所收获了,昨天看到一个帖子说的SaveChanges()方法有个参数SaveOption,之前是这样调用的SaveChanges();  然后隔一段时间就会报这个错误,现在改用这个SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave); 那错误就没了,哈哈哈...哈哈哈...哈哈哈哈哈哈哈....

这应该是离开公司前的修改好的最一个bug...还是之前的书籍看的太少了,基础知识不扎实,以后多努力啊,这样基础去找份好工作,还是替你担忧啊....一定要努力...

 

详细解释是这样的:

SaveOptions枚举的内容:
·AcceptAllChangesAfterSave:在所有修改变化被保存后,AcceptAllChangesAfterSave()被调用,来重新设置跟踪。
·DetectChangesBeforeSave: 在修改变化被保存前,DetectChanges()方法被调用来同步对象的属性值。这些对象是在ObjectStateManager中被关联到context上的对象。
·None: 修改变化被保存不调用DetectChanges()或AcceptAllChangesAfterSave()方法。 

SaveOptions重载应该用来确保要么DetectChanges在保存修改变化前被调用,要么AcceptAllChanges在保存修改变化到数据后被调用。为什么非要确保一个呢?DetectChanges用来保证所有的ObjectStateEntry的修改是明确的并同步了所有ObjectStateManager跟踪和管理的对象。AcceptAllChanges则允许所有关联到在ObjectStateManager中的实体上的修改变化。所以这样一来的结果是,确保了状态要么是detached要么是unchanged。而实际上,我们没有必要使用它们中的任意一个,因为这个枚举类型有一个更好的可以按位组合的FlagAttribute属性值。

 

原创粉丝点击