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



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

用户.cs

public partial class User
{
    public long Id { get; set; }
    public string Name { get; set; }
    public Customer Customer { get; set; }
}

和:

客户.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没有控制台错误的情况下运行良好的方法,但是当我尝试运行应用程序时出现此错误:

">

用户"的实体与"客户"共享表"AppUsers",但没有此类型的实体具有标记为"已添加"的相同键值

我无法理解这一点。我是学生,刚开始学习关系配置。请问有什么想法吗?

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

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

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

相关内容

  • 没有找到相关文章

最新更新