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

本文关键字:数据库 单例 net mvc3 代码 asp | 更新日期: 2023-09-27 18:17:13

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

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

我试过了,效果很好。除了我有时需要从global.asax访问数据库。(有时)会抛出异常。

有人想过这样做吗?什么好主意吗?

谢谢

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

我个人会遵循一个完全不同的方法,看到我的答案在这里:https://stackoverflow.com/a/7474357/559144我不会使用单例,不会硬链接MVC是一个UI框架与DAL (EF在你的情况下)。

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

我们使用EF context作为每个http上下文的单例。我也不会硬链接EF与MVC,但你仍然可以确保每个http上下文处理一个单独的EF上下文实例通过使用依赖注入(我们使用Unity)。

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

public interface IUnitOfWork : IDisposable
{
    int SaveChanges();
}
public class MyEfContext : DbContext, IUnitOfWork
{
    // your custom context code
}

在我们的例子中,使用IUnitOfWork依赖注入的singleton-per-http-context生存期并不是一个帮助处理并发性的方法。这样做是因为在处理EF实体时,我们需要确保所有的选择/插入/更新/删除总是发生在相同的上下文实例中。EF不允许您将实体附加到多个上下文,因此我们对每个http上下文使用单例。