c# – 实体框架:Detach和AsNoTracking之间的区别

我的目标是复制一个现有的实体,稍微修改它,并插入修改后的版本.

我已经尝试了两种不同的方法

var thing = context.Things.Where(x => x.someID == someid).AsNoTracking().Single();
thing.AnotherID = 1234;
context.Things.Addobject(thing);
context.SaveChanges();

var thing = context.Things.Where(x => x.someID == someid).Single();
context.Detach(thing);
thing.AnotherID = 1234;
context.Things.Addobject(thing);
context.SaveChanges();

从我能告诉他们,他们都完成了我的目标.其中一个比其他更好,还是他们同样好(或错!)

解决方法

一个版本是更好的,我宁愿因为

它表达的更好,你不想跟踪现有实体的变化>它没有将实体附加到上下文,而第二个版本附加,然后立即将其分离(这很可能也会稍微降低性能)>它坚持关系(在这个简单的例子中,一般而言并不重要),而分离一个实体只会分离你进入Detach的实体本身.相关的孩子将保持附带的价格,这些关系将被清除(例如,子实体的导航集合将被清空,参考导航属性将被设置为null),因为EF不允许使用混合的对象图连接和分离的实体.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...