Asp.net-Mvc

多個 DbContext,多個 Database.SetInitializer

  • July 16, 2015

我創建了兩個 DbContext,一個用於應用程序配置,第二個用於日誌記錄。

原因是,我想在日誌數據庫上設置一個最大大小,這樣它就不會耗盡所有可用磁碟空間並阻止其他數據庫工作。

在我的 global.asax.cs 文件中,我有以下內容:

       protected void Application_Start()
   {

       AreaRegistration.RegisterAllAreas();

       RegisterGlobalFilters(GlobalFilters.Filters);
       RegisterRoutes(RouteTable.Routes);

       Database.SetInitializer<AdminContext>(new AdminInitialiser());
       Database.SetInitializer<LoggingContext>(new LoggingInitialiser());
   }

未呼叫 LoggingInitialiser 中的 InitializeDatabase 方法。這是因為只能設置一個初始化程序嗎?有沒有辦法為兩個 DbContexts 設置初始化程序?

而是在 DbContext 建構子中設置初始化程序。

public class AdminContext : DbContext
{
   public AdminContext()
   {
       Database.SetInitializer(new AdminInitialiser());
   }
}

public class LoggingContext : DbContext
{
   public LoggingContext()
   {
       Database.SetInitializer(new LoggingInitialiser());
   }
}

是的,你可以做到。您只需要在繼續下一個之前進行初始化。

 Database.SetInitializer<MyDBContext>(myInitializer);
 MyDbContext context = new MyDbContext();
 context.Database.Initialize(false);

 Database.SetInitializer<MySecondDBContext>(myInitializer);
 MySecondDbContext context2 = new MySecondDbContext();
 context2.Database.Initialize(false);

注意:我通常從依賴解析器獲取 DbContext 實例……

引用自:https://stackoverflow.com/questions/11190310