【发布时间】:2015-09-05 08:43:46
【问题描述】:
我需要在一个事务中更新我的数据库中的几个表,我读到使用DbContext.SaveChanges 应该是这样做的方法。
但是我也读到DbContext 的生命周期应该尽可能短,因为随着时间的推移它会随着加载更多实体而增长。
我还读到,为了使其线程安全,每个操作都应该有自己的DbContext。
我是否应该为每个要更改的表设置一个DbContext 并在每个DbContext 上调用SaveChanges?最后一次SaveChanges 调用不会覆盖之前调用的更改吗?
最好的方法是什么? (我需要这个做网站)
【问题讨论】:
-
如果您想在单个事务中完成所有操作,那么单个 DbContext 就可以了。无需担心线程安全,因为您需要按顺序执行所有操作。
-
@DavidG :但是如果 2 个用户尝试同时使用同一个 DbContext 怎么办?它不会导致竞争条件吗?
-
你不应该允许这种情况发生。 DbContext 不适合那样使用,如果你尝试,它会做一些非常奇怪的事情!
-
@DavidG:这就是为什么我问我是否应该为每个动作使用 DbContext。我可以在使用时使用一个简单的互斥锁,但是我可能会失去一些可能内置的优化......
-
你真的应该展示一些代码。当您谈论共享上下文和需要互斥体时,我感觉您正在做一些非常糟糕的事情,但是如果我们看不到确切发生的情况,我们无法给出任何明确的建议。
标签: c# asp.net-mvc multithreading entity-framework