首页 > 解决方案 > 在多个 DbContext 中使用相同的实体(EF Core 2)

问题描述

我在一个项目中有两个 DbContext (EFCore 2),它们共享同一个实体。我的问题是 EFCore 为该实体创建了两个表。

每个 DbContext 都有自己的架构。事实上,我想创建一个多域(和多 DbContext)应用程序,但一个 DbContext 中的实体是共享的,其他 DbContext 引用这些实体。

上下文:

public class CommonContext : DbContext
{

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("common");
    }

    public DbSet<DomainModel.Common.User> Users { get; set; }
}

public class App1DbContext : DbContext
{

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("app1");
    }

    public DbSet<DomainModel.App1.Book> Books { get; set; }
}

楷模:

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Book 
{
    public string Title { get; set; }
    public User Author { get; set; }
}

我首先使用迁移创建了通用模式:

add-migration -context CommonContext
update-database -context CommonContext

然后,我创建了 app1 架构:

add-migration -context app1
update-database -context app1

但是 EF 在两种模式中都创建了“用户”表!EF 不明白这两个独立的 DbContext 共享同一个实体(用户)。我希望 EF 仅在通用模式(CommonContext)中创建用户表。

我该如何解决这个问题?

标签: entity-frameworkentity-framework-coreef-core-2.0

解决方案


推荐阅读