.net core 具有可选父级的一对多

.net core 具有可选父级的一对多,.net-core,entity-framework-core,.net Core,Entity Framework Core,我的班级: public customer { int Id; public string name; ...other public ICollection<Address> Addresses { get; set; } = new List<Address>(); } public Employee { int Id; public string name; public ICollection<Address> Addr

我的班级:

public customer
{
  int Id;
  public string name;

  ...other
 public ICollection<Address> Addresses { get; set; } = new List<Address>();
}


public Employee
{
  int Id;
  public string name;
  public ICollection<Address> Addresses { get; set; } = new List<Address>();
}
public Address
{
  int Id;
   //other deatils
  
 public int? CustomerId { get; set; }
   public Customer Customer { get; set; } = null!;

     public int? EmployeeId;{ get; set; }
   public Employee { get; set; } = null!;

 

}
公共客户
{
int-Id;
公共字符串名称;
……其他
公共ICollection地址{get;set;}=new List();
}
公职人员
{
int-Id;
公共字符串名称;
公共ICollection地址{get;set;}=new List();
}
公共广播
{
int-Id;
//其他死亡
public int?CustomerId{get;set;}
公共客户客户{get;set;}=null!;
public int?EmployeeId;{get;set;}
公共雇员{get;set;}=null!;
}
我正在使用ef core最新预览版。。我有三张表:客户、员工和地址。这里的地址对于客户和员工都是通用的。。所以我决定将类ID和类ID都作为可选项

我的问题是我正在做仪式,或者我必须为每个人做单独的演讲课。提前谢谢


注意:客户/员工可以有多个地址,但不能相同(每次客户添加的新地址都将被保存(如果相同))

IMHO您的建模需要重新考虑

如果我看到你的地址模型,它是这样说的:“一个地址可以有一个员工或一个客户,或者两者都有”

这是您域中地址的定义吗

在现实生活中肯定没有意义

另外,我觉得这不是一对多,一对多就是“一个人有多个地址”:发布你的编辑

将很快发布一些建模信息。

最简单的方法是

  • 在数据库中添加这3个表
  • 打开地址表设计器并添加与客户和员工表链接的关系
  • 在nuget包管理器中使用“Scaffold Dbcontext”命令自动生成所有内容

  • 这一个,你不用想。就让EF core帮你吧。

    谢谢。一个地址可以有一个员工或一个客户——一个地址对双方都不一样。请让我想一想,在发布任何答案之前,我会用代码测试一下。现在我想的是“员工就是人”,“客户就是人”,“一个人可以有多个地址”让我看看这句话是怎么翻译的,这就是我的意思。数据库优先的方法比代码优先的方法更简单。你什么都不用想。使用数据库优先方法=让EFCore为您做并生成所有事情。如果您切换到数据库优先的方法,您的任务将变得更容易、更轻松。您只需使用此方法,就可以看到EFCore的模型是什么样子的。然后,如果您更愿意使用代码优先方法,请将EFCore的模型复制到您的代码优先方法模型中。