Multiple DbContext, multiple Database.SetInitializer

前端 未结 3 1401
北恋
北恋 2021-01-02 14:34

I have created two DbContexts, one is for application configuration, the second is for logging.

The reason being, I want to set a maximum size on the logging db so

相关标签:
3条回答
  • 2021-01-02 14:49

    I suggest to put the SetInitializer call to static constructor like below:

        static ApplicationIdentityDbContext()
        {
            Database.SetInitializer(new IdentityDbInitializer());
        }
    

    Below is from MSDN

    A static constructor is used to initialize any static data, or to perform a particular action that needs to be performed once only. It is called automatically before the first instance is created or any static members are referenced.

    So static constructor is ideal for initialize database. I have used this technique for multiple database and it works well for me.

    0 讨论(0)
  • 2021-01-02 14:55

    Yes you can do it. You just need to initialize before you move on to the next one.

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

    Note: that I usually get the DbContext instance from a dependency resolver...

    0 讨论(0)
  • 2021-01-02 15:02

    Set the initializer in the DbContext constructor instead.

    public class AdminContext : DbContext
    {
        public AdminContext()
        {
            Database.SetInitializer(new AdminInitialiser());
        }
    }
    
    public class LoggingContext : DbContext
    {
        public LoggingContext()
        {
            Database.SetInitializer(new LoggingInitialiser());
        }
    }
    
    0 讨论(0)
提交回复
热议问题