Sta*_*ker 13 c# entity entity-framework
以下是有什么区别的:
db.AcceptAllChanges();
// vs
db.SaveChanges();
db.AddToCustomer()
// vs
db.Customers.AddObject(Mycustomer);
Run Code Online (Sandbox Code Playgroud)
为什么有db.Customers.DeleteObject(Mycustomer); 和没有db.DeleteFromCustomer(Mycustomer);
我何时应该使用每一个?
也是实体框架线程安全?我的意思是如果两个线程在同一时间更新对象中的对象会崩溃吗?
提前致谢
Dun*_*tts 12
db.AcceptAllChanges()假设您已完成任何关联的更改历史记录并将其丢弃 - 如果您有任何其他问题,则无法恢复这些更改. db.SaveChanges(false)如果有问题,请将这些更改保留在内存中.
请参阅http://blogs.msdn.com/b/alexj/archive/2009/01/11/savechanges-false.aspx以获得更深入的答案.
db.AddToCustomer()是一个强类型的包装器db.Customers.AddObject().看看它的定义,你会明白我的意思.我会db.AddToCustomer()纯粹使用该方法,因为它是强类型的,并为您提供编译时类型检查.
我想是没有的唯一原因DeleteFromCustomer()是他们不认为工作是必要的(人们倾向于增加比他们删除的更多).然而,没有什么可以阻止你自己创建自己的扩展方法来实现它.
EF不是线程安全的,如果您想执行更新,您需要自己管理锁定.有关更多信息,请参见http://blog.cincura.net/230902-multithreading-with-entity-framework/
AcceptAllChanges仅在ObjectContextStateManager实例中设置所有添加和修改的实体以Unchanged声明和分离所有已删除的实体,但它不会在数据库中执行更改.SaveChanges执行数据库中的更改,默认情况下也接受更改(可以配置为不执行更改).
AddToCustomer是一样的Customers.AddObject- 它只是一个捷径(与之相同DeleteObject).第一种方法是由代码生成器生成的(我认为它调用第二种方法是标准方法ObjectSet).
实体框架不是线程安全的.此外,在多个线程之间共享时应该非常小心ObjectContext.