EF6 Code First中多个DbContexts内的继承

时间:2014-01-27 12:27:37

标签: asp.net-mvc entity-framework ef-code-first modularity

我们开发了模块化的ASP.NET MVC 5应用程序(首先是EF6代码)。每个模块都有自己的DbContext。我们有一种“核心”模块。我们其他模块中的某些类继承自核心类。核心不得引用模块。 更新:模块项目通常引用核心项目。

自动创建数据库。我们遍历所有模块程序集并迁移每个模块和核心的DbMigrationsConfiguration:

Type configurationType = assembly.GetType(assembly.GetName().Name +".Migrations.Configuration");
Object configurationInstance = Activator.CreateInstance(configurationType);
DbMigrator configurationMigrator = new DbMigrator((DbMigrationsConfiguration)configurationInstance);
configurationMigrator.Update();
Database.SetInitializer<DbContext>(null);

//核心类示例

[Table("Core.ClassA")]
public class ClassA
{
    public int Id { get; set; }

    public HashSet<ClassB> classb { get; set; }
}

[Table("Core.ClassB")]
public class ClassB
{
    public int Id { get; set; }
}

//模块类示例

[Table("Module.ClassC")]
public class ClassC : ClassA
{
    public string field { get; set; }
}

当我们在模块上下文中存储C类实例时,它会失败,因为模块上下文没有引用ClassA和ClassB。我们如何解决这个问题并将模块化分开上下文和模块?

更新:我们尝试使用DbContext继承来解决问题。模块DbContext继承自核心DbContext。这乍一看就解决了这个问题。不幸的是,自动迁移会尝试为每个模块创建所有核心表,因为重复的表是不可能的。所以我们尝试用

排除模块上下文中的所有核心实体
modelBuilder.Ignore<ClassA>();

这也不起作用,因为模块上下文丢失了对核心实体的所有引用(我们只是想忽略它们用于模型构建并保留所有引用)。 所以我们的问题仍无法解决。

0 个答案:

没有答案
相关问题