因此,在我们有两个类的映射中遇到问题public class Customer{ public int Id; public CustomerAddress StatementAddress public bool AlwaysTrue => true; public string Code;}public class CustomerAddress{ public int Id; public bool ForStatement; public string _CustomerCode}我们有一个像这样设置的映射:protected override void OnModelCreating(ModelBuilder modelBuilder){ modelBuilder.Entity<Customer>() .HasOne(s => s.StatementAddress) .WithMany() .HasPrincipalKey(x=> new {x._CustomerCode, x.ForStatement}) .HasForeignKey(s => new { s.Code, s.AlwaysTrue});}然而,这导致了一个问题,因为它似乎是在数据库上寻找 Customer 表中的 StatementAddress_CustomerCode 和 StatementAddress_ForStatement 列,这显然不是存在的东西 - 为什么它不寻找 Code 表并简单地通过 True for AlwaysTrue?我原以为它的定义键的方式只是使用代码和 Alwaystrue 值,但似乎正在寻找由属性名称的组合组成的两列,附加来自另一个类的属性名称 =/
2 回答
波斯汪
TA贡献1811条经验 获得超4个赞
我在这里建议两件事:
您可以像这样手动定义列名:
public class Customer
{
public int Id;
public CustomerAddress StatementAddress;
[Column("StatementAddress_ForStatement")]
public bool AlwaysTrue => true;
[Column("StatementAddress_CustomerCode")]
public string Code;
}
您可以ForeignKeyAttribute像这样指定外键:
public class Customer
{
public int Id;
public CustomerAddress StatementAddress;
[ForeignKey("StatementAddress"), Column(Order = 1)]
public bool AlwaysTrue => true;
[ForeignKey("StatementAddress"), Column(Order = 0)]
public string Code;
}
请记住,对于此选项,您必须设置列顺序属性以匹配CustomerAddress表中外键所具有的属性。
希望这可以帮助!
- 2 回答
- 0 关注
- 162 浏览
添加回答
举报
0/150
提交
取消