在 EF Core 2 中配置使用 Table 拆分的关系

Configuring a relationship that uses Table Splitting in EF Core 2

我正在尝试使用流畅的配置在 EF Core 2 中构建我的第一个 Table 拆分。
我有两个名为 UserCustomer 的简单实体,我想在名为 "AppUsers" 的单个 table 中使用它们。所以我为两者创建了一个简单的实体 类:

User.cs

public partial class User
{
    public long Id { get; set; }

    public string Name { get; set; }

    public Customer Customer { get; set; }
}

并且:

Customer.cs

public partial class Customer
{
    public long Id { get; set; }

    public Guid CustomerGuid { get; set; }

    public User User { get; set; }
}

然后我将 MyDbContext 更改为:

MyDbContext.cs

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options)
        : base(options)
    {
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>()
            .HasOne(c => c.Customer).WithOne(c => c.User)
            .HasForeignKey<Customer>(e => e.Id);

        modelBuilder.Entity<User>().ToTable("AppUsers");
        modelBuilder.Entity<Customer>().ToTable("AppUsers");
        base.OnModelCreating(modelBuilder);
    }
}

然后我使用 Add-Migration "Simple_Test" 创建了一个没有错误的迁移。所以我 运行 Update-Database 在没有控制台错误的情况下工作正常但是当我尝试 运行 应用程序时出现此错误:

The entity of 'User' is sharing the table 'AppUsers' with 'Customer', but there is no entity of this type with the same key value that has been marked as 'Added'

这个我看不懂。我是学生,刚开始学习关系配置。有什么想法吗?

问题是数据库中的每一行 table 现在都包含来自两个实体的字段——一个用户和一个客户。这意味着每次创建和保存一个用户时,也必须创建和保存一个具有相同Id的客户,因为数据库行不能只包含一个用户或只包含一个客户,它必须两者都有。

我用另一种方法添加了客户种子,这是我的傻瓜。那必须在用户种子中。

var user = new User(); user.Customer = new Customer { Id = user.Id }