所以这可能是一个愚蠢的问题,因为我知道在从现有数据库创建代码优先模型时,Visual Studio将创建一个新的ADO.NET实体数据模型,并在新的DbContext中添加模型。 / p>
我在项目中使用Microsoft Identity,因此已经有ApplicationDbContext
(IdentityDbContext)。我认为将所有模型放在一个DbContext中会更容易处理。我正在从现有数据库生成代码优先模型。
但有没有一种方法可以将生成的模型添加到已存在的DbContext中(在本例中为IdentityDbContext?)
我喜欢很多模型,所以目前我不得不手动将每个模型添加到现有的ApplicationDbContext
中,并从创建的DbContext中删除。
答案 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)
这是一个有效的替代方案:
将您的ApplicationDbContext
班级标记为部分:
public partial class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext() : base("DefaultConnection")
{
//unchanged
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//unchanged
}
}
对自定义数据模型类执行相同操作,并从DbContext
中删除继承。此外,从中删除构造函数并将OnModelCreating
更改为具有不同名称的常规私有方法。其余部分保持不变。
public partial class MyDataModels
{
//unchanged
private void OnModelCreating2(DbModelBuilder modelBuilder)
{
//unchanged
}
}
重构( 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);
}
}
@DevilSuichiro建议的另一个不错的方法是从ApplicationDbContext
继承您的数据模型类。
干杯!