gpt4 book ai didi

c# - EF 6 使用 TPT 报错都具有相同的主键值

转载 作者:可可西里 更新时间:2023-11-01 08:50:02 24 4
gpt4 key购买 nike

我有一个关于 TPT + EF6 的大问题。

在我的数据库模型中,我有一张表 Person(我的应用程序中人员的基本信息),并且我有用于 SupplierConsumer 的表.

我的类(class)是:

//to table dbo.Person
public class Person
{
public long Id {get; set;} //is pk
public string Name {get; set;}
}

//to table dbo.Supplier
public class Supplier : Person
{
public long Id {get; set;}//is pk and fk
public string ProductName {get; set;}
}

//to table dbo.Consumer
public class Consumer
{
public long Id {get; set;} //is pk and fk
public string budget {get; set;}
}

如果我有一个人既是供应商又是消费者,并且我从相同/不同的 DBContext 获取记录或从另一个实体导航,然后 EF 抛出异常:

All objects in the EntitySet Person must have unique primary keys. However, an instance of type Supplierand an instance of type Consumer both have the same primary key value, EntitySet=Person;ID=20.

有没有办法在 TPT 继承中指定一个鉴别器?我该如何解决这个问题?

最佳答案

我建议您实际需要的模式是 Table Per Concrete Class

as illustrated by this SQL Server diagram

这可以通过以下方式实现

public class Person
{
public int Id { get; set; }

public Supplier Supplier { get; set; }

public Consumer Consumer { get; set; }


}

public class Supplier
{
public int Id { get; set; }
public string ProductName { get; set; }
}

public class Consumer
{
public int Id { get; set; }
public string Budget { get; set; }
}

请记住将以下内容放入您的 dbcontext

  public DbSet<Supplier> Suppliers { get; set; }
public DbSet<Consumer> Consumers { get; set; }
public DbSet<Person> People { get; set; }

关于c# - EF 6 使用 TPT 报错都具有相同的主键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26770900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com