在实体框架中的运行时将新模型添加到现有上下文中

时间:2016-10-03 14:53:37

标签: entity-framework

在dll中有一个dbContext,在另一个项目中导入它并以编程方式添加新模型/实体/表是否可行,这样你就可以与以前存在的表建立连接?

我会尝试解释为什么我想要这样的事情(可能有更好的方法)。

我想创建一个模块化应用程序,因此会有一个带有dbContext的Core.dll。我希望其他人制作模块,以便能够扩展Core dbContext。

感谢。

1 个答案:

答案 0 :(得分:1)

如果我能正确理解,听起来你基本上想要做EF已经做过的事情。首先使用代码至少有几种方法可以做到这一点。我喜欢使用EntityTypeConfiguration方法(而不是流畅的API)来构建我的对象模型。在您的情况下,这可能看起来像这样:

using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;
using CoreNamespace;

namespace CoreNamespace
{
   public class MyDbContext:DbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
        modelBuilder.Configurations.Add(new CoreEntityConfiguration());
    }
}

public class CoreEntity
{
    //list properties, methods, etc
}

public class CoreEntityConfiguration : EntityTypeConfiguration<CoreEntity>
{
    public CoreEntityConfiguration()
    {
        //configure entity and map to db
    }
}

namespace ExtendingProjectNamespace
{
    public class MyExtendedDbContext : MyDbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Configurations.Add(new SubEntityConfiguration());
         }
    }

    public class SubEntity
    {
        //list properties, methods, etc
    }

    public class SubEntityConfiguration : EntityTypeConfiguration<SubEntity>
    {
        public SubEntityConfiguration()
        {
            //configure entity and map to db
        }
    }
}

此处的命名空间旨在引用单独的项目/ dll