亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實體框架核心復合鍵一對多映射

實體框架核心復合鍵一對多映射

C#
喵喵時光機 2021-10-23 17:27:16
因此,在我們有兩個類的映射中遇到問題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貢獻1851條經驗 獲得超4個贊

所以,要結束這個 -

這在 EF Core (2.1) 中目前無法實現,是否會在未來版本中添加還有待觀察 - 目前它僅支持通過單個屬性進行映射


查看完整回答
反對 回復 2021-10-23
?
波斯汪

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表中外鍵所具有的屬性。


希望這可以幫助!


查看完整回答
反對 回復 2021-10-23
  • 2 回答
  • 0 關注
  • 206 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號