繁体   English   中英

asp.net mvc3代码优先(数据库单例)

[英]asp.net mvc3 Code First (Database Singleton)

我首先使用代码在asp.net mvc上工作。 我注意到,一旦创建了一个新的控制器,该控制器模板就会显示仅处理一项工作的dispose覆盖方法。 处置在此控制器顶部创建的db变量。

我正在考虑将其更改为在我的DBContext类中使用单例模式。

我尝试了一下,效果很好。 除了我有时需要从global.asax访问数据库。 (有时)会引发异常。

有没有人想过这样做? 有任何想法吗?

谢谢

我个人将采用完全不同的方法,请在此处查看我的答案: https ://stackoverflow.com/a/7474357/559144我不会使用Singleton,也不会将MVC硬链接到DAL(在您的情况下为EF) )。

关于不使用单例,让数据库处理并发; 这是数据库服务器最好的事情之一;-)

我们使用EF上下文作为每个http上下文的单例。 我也不会将EF与MVC进行硬链接,但是您仍然可以通过使用依赖项注入(我们使用Unity)来确保每个http上下文都处理单个EF上下文实例。

我们还访问全局asax中的上下文,以进行数据库初始化和种子开发。 同样,您可以使用DI容器获取EF上下文的实例。

public interface IUnitOfWork : IDisposable
{
    int SaveChanges();
}

public class MyEfContext : DbContext, IUnitOfWork
{
    // your custom context code
}

在IUnitOfWork依赖项注入中使用每个HTTP上下文的生存期并不是在我们的案例中帮助处理并发的方法。 我们这样做是因为在处理EF实体时,我们需要确保所有选择/插入/更新/删除操作始终在同一上下文实例中进行。 EF不允许您将实体附加到多个上下文,因此,每个http上下文使用单例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM