Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到实体接受更改保存更改_C#_Entity Framework_Entity - Fatal编程技术网

C# Linq到实体接受更改保存更改

C# Linq到实体接受更改保存更改,c#,entity-framework,entity,C#,Entity Framework,Entity,以下各项之间的区别是什么: db.AcceptAllChanges(); // vs db.SaveChanges(); db.AddToCustomer() // vs db.Customers.AddObject(Mycustomer); 为什么会有db.Customers.DeleteObject(Mycustomer)和否db.DeleteFromCustomer(Mycustomer)

以下各项之间的区别是什么:

        db.AcceptAllChanges();
        // vs
        db.SaveChanges();

        db.AddToCustomer()
        // vs
        db.Customers.AddObject(Mycustomer);
为什么会有
db.Customers.DeleteObject(Mycustomer)和否
db.DeleteFromCustomer(Mycustomer)

我应该什么时候使用每一个

实体框架也是线程安全的吗?我的意思是,如果两个线程在sametime上下文中更新对象,它会崩溃吗


提前感谢

接受更改
仅将
ObjectContextStateManager
实例中所有添加和修改的实体设置为
未更改
状态并分离所有删除的实体,但它不执行数据库中的更改<代码>保存更改
执行数据库中的更改,默认情况下还接受更改(可以配置为不接受更改)

AddToCustomer
客户相同。AddObject
-它只是一个快捷方式(与
DeleteObject
相同)。第一个方法由代码生成器生成(我认为它调用了第二个方法,这是
ObjectSet
的标准方法)

实体框架不是线程安全的。此外,在多个线程之间共享
ObjectContext
时,您也应该这样做。

db.AcceptAllChanges()
假设您已经完成了任何关联的更改历史记录,并将其丢弃-如果您有任何进一步的问题,则无法恢复这些更改
db.SaveChanges(false)
会将这些更改保留在内存中,以防出现问题

有关更深入的答案,请参阅

db.AddToCustomer()
是围绕
db.Customers.AddObject()
的强类型包装。看看它的定义,你就会明白我的意思了。我将使用
db.AddToCustomer()
方法,因为它是强类型的,并提供编译时类型检查

我想没有
DeleteFromCustomer()
的唯一原因是他们认为这项工作没有必要(人们倾向于添加多于删除)。但是,没有什么可以阻止您创建自己的扩展方法来自己实现它


EF不是线程安全的,如果要执行更新,需要自己管理锁定。有关更多信息,请参见:)

AddObject也是强类型的,因为它是泛型类型ObjectSet的方法-在本场景中,ObjectSet和方法的定义是AddObject(客户实体)。