EF Code First可以在一个应用程序中再增加两个DBContext吗?

时间:2012-02-04 15:05:07

标签: asp.net-mvc entity-framework dbcontext

我有一个ASP.NET MVC应用程序,它使用EF代码首先,出于某种原因我需要为我的应用程序使用2个不同的DBContext,如下例所示:

namespace ESN.Models
{
    public class CoreA
    {
        //..........
    }

    public class CoreB
    {
        //..........
    }

    public class CoreDbContext : DbContext
    {
        public DbSet<CoreA> CoreA { get; set; }
        public DbSet<CoreB> CoreB { get; set; }
    }

    public class StuffA
    {
        //..........
    }

    public class StuffB
    {
        //..........
    }

    public class StuffDbContext : DbContext
    {
        public DbSet<StuffA> StuffA { get; set; }
        public DbSet<StuffB> StuffB { get; set; }
    }
}

为方便开发,我添加了一些代码,如果模型发生变化,则删除并重新创建数据库:

    Database.SetInitializer<CoreDbContext>(new DropCreateDatabaseIfModelChanges<CoreDbContext>());
    Database.SetInitializer<StuffDbContext>(new DropCreateDatabaseIfModelChanges<StuffDbContext>());

但问题是他们只是为我需要先使用的DbContent创建新表,Core表存在但没有Stuff!

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果要使用两个DbContext类型和数据库初始化程序,则每个上下文必须使用自己的数据库。如果对两种上下文类型使用相同的数据库,则无法使用数据库初始化程序,并且必须手动维护数据库模式更改(在使用应用程序之前,必须手动或通过某些SQL脚本创建数据库和所有必需的表)。