我应该避免代码优先项目上的多datacontext和迁移配置吗?

时间:2014-03-17 09:59:30

标签: entity-framework

我正在开发一个ASP.NET MVC 5.1项目,我首先使用ASP.NET身份功能和代码。

默认情况下,ASP.NET标识具有自己的datacontext( IdentityModels.cs ),它继承 Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext

因为我害怕影响身份模型。

所以我创建了另一个上下文继承 DbContext ,并通过以下命令创建另一个迁移配置:

  

enable-migrations -ContextTypeName PosApp.Models.OtherContext -MigrationsDirectory :OtherContextMigrations

使用特定的配置命令行来更新数据库:

  

添加迁移 -ConfigurationTypeName   PosApp.OtherContextMigrations.Configuration -Name GenDB更新 - 数据库    -ConfigurationTypeName PosApp.OtherContextMigrations.Configuration

但是,我发现它会导致表之间的迁移冲突。

例如:

DataContext A和配置A:

生成表:博客发布评论

DataContext B和配置B: 生成表:用户,但引用博客(1:N,表示1个用户可以拥有自己的多博客)。

如果我在Config B上输入命令行 - add-migration

Blog表将再次生成,并且由于该表存在于Config A上而发生冲突。

即使我可以覆盖OnModelCreating()事件并使用modelBuilder.ignore<T>,但这会造成混乱。

那么我是否应该避免多配置迁移?

还是有什么好处?

1 个答案:

答案 0 :(得分:0)

你使用moddelBuilder.ignore走在正确的轨道上。在您的identityDbContext中添加:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Ignore<Blog>();
        base.OnModelCreating(modelBuilder);
    }

然后,要使用从用户到博客的关系,请创建一个继承自IdentityDbContext的新数据上下文,并不要向其添加迁移。