【发布时间】:2013-01-09 21:14:30
【问题描述】:
为每个事务创建一个新的DbContext 有什么区别:
using (var context = new MyDbContext()) { /* transaction */ }
并在整个应用程序中使用一个
var context = MyDbContext.Singleton;
*/ transaction */
【问题讨论】:
为每个事务创建一个新的DbContext 有什么区别:
using (var context = new MyDbContext()) { /* transaction */ }
并在整个应用程序中使用一个
var context = MyDbContext.Singleton;
*/ transaction */
【问题讨论】:
一个(第一个)是正确的方法。
另一个是不正确的做法。
实体框架旨在具有短暂的上下文。它在运行时不进行内存管理或清理,并且它存在的时间越长,它就会继续增长和使用内存。它被设计为在每次使用后丢弃。如果您以第二种方式使用它,您的代码将被破坏。
如果您正在开发网络应用程序,情况会更糟。第二种方法可能会导致数据损坏,因为上下文会在所有用户之间共享,并且状态将被多个用户同时尝试对其进行破坏。
【讨论】:
Entity Framework is designed to have short lived contexts. It does not memory management or cleanup" - 你能详细说明一下吗?