0

我正在通过 Entity Framework 4 访问我的数据库。

我有一个监听端口的服务器,等待一些消息。当一条消息到来时,它被翻译成一个表行并且应该被插入到数据库中。但是,可以同时发送多条消息。对于每条消息,我都会创建一个任务(来自 TPL)并异步执行它。

这些任务中的每一个都创建 ObjectContext 的实例,创建相应实体类的对象(表示 DB 中的表),将数据插入 ObjectContext,然后调用 SaveChanges 方法。

因此,每个线程都创建了自己的 ObjectContext。ObjectContext 的一个实例能否影响 ObjectContext 的任何其他实例?这种情况会有副作用吗?

(请注意,插入的数据不会产生任何参照完整性错误)。

4

2 回答 2

5

在您的情况下,事务完整性由数据库(SQL Server)而不是实体框架保证。由于每个线程都有自己的上下文,因此您不必担心每个上下文会SaveChanges()干扰另一个上下文。

一个实例ObjectContext不能影响另一个实例。您可能会遇到这样一种情况,即SaveChanges()修改数据库的方式导致SaveChanges()不同上下文中的后续操作失败。但这是设计使然,也是 SQL Server 强制执行其约束的结果。

于 2011-12-13T14:50:53.867 回答
1

数据上下文通常不是线程安全的;但是因为它们都是独立的(按请求),所以这不是问题。

过于简单的答案是“否”,因为上下文是不相关的。SaveChanges但是,与数据库对话的任何内容可能具有边缘条件,具体取决于您在.或对不同的请求进行 2 次插入,这些插入单独可以,但组合起来会违反唯一约束等。

于 2011-12-13T14:50:14.103 回答