实体框架核心复合键一对多映射

因此,在我们有两个类的映射中遇到问题


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 值,但似乎正在寻找由属性名称的组合组成的两列,附加来自另一个类的属性名称 =/


喵喵时光机
浏览 163回答 2
2回答

繁花不似锦

所以,要结束这个 -这在 EF Core (2.1) 中目前无法实现,是否会在未来版本中添加还有待观察 - 目前它仅支持通过单个属性进行映射

波斯汪

我在这里建议两件事:您可以像这样手动定义列名:public class Customer{&nbsp; &nbsp; public int Id;&nbsp; &nbsp; public CustomerAddress StatementAddress;&nbsp; &nbsp; [Column("StatementAddress_ForStatement")]&nbsp; &nbsp; public bool AlwaysTrue => true;&nbsp; &nbsp; [Column("StatementAddress_CustomerCode")]&nbsp; &nbsp; public string Code;}您可以ForeignKeyAttribute像这样指定外键:public class Customer{&nbsp; &nbsp; public int Id;&nbsp; &nbsp; public CustomerAddress StatementAddress;&nbsp; &nbsp; [ForeignKey("StatementAddress"), Column(Order = 1)]&nbsp; &nbsp; public bool AlwaysTrue => true;&nbsp; &nbsp; [ForeignKey("StatementAddress"), Column(Order = 0)]&nbsp; &nbsp; public string Code;}请记住,对于此选项,您必须设置列顺序属性以匹配CustomerAddress表中外键所具有的属性。希望这可以帮助!
打开App,查看更多内容
随时随地看视频慕课网APP