EF Code-First从现有的db添加模型到现有的DbContext

时间:2016-10-01 17:15:13

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

所以这可能是一个愚蠢的问题,因为我知道在从现有数据库创建代码优先模型时,Visual Studio将创建一个新的ADO.NET实体数据模型,并在新的DbContext中添加模型。 / p>

我在项目中使用Microsoft Identity,因此已经有ApplicationDbContext(IdentityDbContext)。我认为将所有模型放在一个DbContext中会更容易处理。我正在从现有数据库生成代码优先模型。

但有没有一种方法可以将生成的模型添加到已存在的DbContext中(在本例中为IdentityDbContext?)

我喜欢很多模型,所以目前我不得不手动将每个模型添加到现有的ApplicationDbContext中,并从创建的DbContext中删除。

2 个答案:

答案 0 :(得分:0)

据我记得,无法自动将生成的模型对象添加到现有的DbContext中。您需要手动添加它们。

public partial class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("name=DefaultConnection")            
    {

    }

    //Add your Model objects here, You can copy them from automatically generated DbContext
    public virtual DbSet<ModelObjectName> PropertyName { get; set; }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //Copy the modelBuilder configuration here from automatically generated DbContext here

        base.OnModelCreating(modelBuilder);
    }
}

答案 1 :(得分:0)

这是一个有效的替代方案:

  1. 将您的ApplicationDbContext班级标记为部分:

    public partial class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext() : base("DefaultConnection")
        {
             //unchanged
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //unchanged
        }
    }
    
  2. 对自定义数据模型类执行相同操作,并从DbContext中删除继承。此外,从中删除构造函数并将OnModelCreating更改为具有不同名称的常规私有方法。其余部分保持不变。

    public partial class MyDataModels
    {
    
            //unchanged
    
        private void OnModelCreating2(DbModelBuilder modelBuilder)
        {
            //unchanged
        }
    }
    
  3. 重构( Ctrl + R + R:默认快捷方式)您的数据模型类的名称,并将其更改为ApplicationDbContext。 Visual Studio可能会在重构期间给您一个冲突警告,忽略它并重构。最后,从OnModelCreating2()类的OnModelCreating()方法调用ApplicationDbContext

    public partial class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext() : base("DefaultConnection")
        {
             //unchanged
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //unchanged
    
            OnModelCreating2(modelBuilder);
        }
    }
    
  4. @DevilSuichiro建议的另一个不错的方法是从ApplicationDbContext继承您的数据模型类。

    干杯!

相关问题