对于我的LINQ对象Foo,我希望有一个“之前和之后”状态包围我的对象变异(来自ASP.NET MVC UpdateModel()调用).我的想法是将附加实例的预变异属性复制到一个新的未连接实例中.然后,我将能够在附加的实例中进行更新,并将它们的值与未附加的实例中的值进行比较.像这样:
Foo real = context.Foos.First(aFoo => aFoo.ID == id) Foo old = new Foo(); old.Bar = real.Bar; old.Baz = real.Baz; SomeSortOfUpdate(real); if ( !real.Bar.Equals(old.Bar) || real.Baz.Equals(old.Baz) ) { LogChanges(old,real); } context.SubmitChanges();
这就是问题:“Foo old”引用的对象在context.SubmitChanges()期间被保存(插入).我将其追溯到LINQ-to-sql关联的属性分配.
因此,例如,如果Baz是一个由表支持的L2S生成的类型,包括old.Baz = real.Baz将导致旧的sql插入除了真实的任何sql更新.删除它(但保持旧.Bar)使事情按预期工作.
我猜这是因为Foo.Baz赋值在可保存对象图中在Foo和Baz之间建立了链接.由于真实存档,LINQ还会遍历所有相关对象并查找更改. real.Baz本身并没有改变,但是它与old有一个新的关联,它尚未保存,因此会被提交到SubmitChanges调用中.
有什么办法可以防止图表中的对象被保存吗?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。