c# – 实体框架:Detach和AsNoTracking之间的区别
发布时间:2020-12-15 06:47:14 所属栏目:百科 来源:网络整理
导读:我的目标是复制一个现有的实体,稍微修改它,并插入修改后的版本. 我已经尝试了两种不同的方法: var thing = context.Things.Where(x = x.SomeID == someid).AsNoTracking().Single();thing.AnotherID = 1234;context.Things.AddObject(thing);context.SaveCh
我的目标是复制一个现有的实体,稍微修改它,并插入修改后的版本.
我已经尝试了两种不同的方法: 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不允许使用混合的对象图连接和分离的实体. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |