我有兩個物件。團隊和球員。一名球員擁有一支球隊。一支球隊有很多球員。
我可以通過兩種方式設計這種關系:
不使用 FK
播放器
int Id {get;set;}
int TeamId {get;set;}
團隊
int Id;
每當我想獲得 ID 為 123 的球隊的球員名單時,我會這樣查詢:
players.Where(p=>p.TeamId == 123).ToList();
選項#2:使用 FK。
播放器
int Id {get;set;}
團隊
int Id {get;set}
public ICollection Players {get;set;}
獲得球員:
team.Players;
我應該使用哪一種?
uj5u.com熱心網友回復:
這取決于你是否需要同時Team和Players細節,或只是Players屬于某支球隊的詳細資訊。
如果你想加載團隊資料和所有團隊成員,你應該查詢Teams以查找單個團隊TeamId和Include所有Players.
如果您只需要一個沒有任何特定Team資料的玩家串列,您應該Players通過查詢TeamId。這樣您就不會Team從無論如何都不會使用的資料庫中提取相關資料,并且避免了表之間的連接。
uj5u.com熱心網友回復:
您的資料庫模型可能不會反映您的域模型,這完全是錯誤的,據說我會同時使用兩者,以便在您需要不同的資料集時進行正確的查詢。下周你可能會遇到你想查詢不同的東西,你擱置一邊的方式更方便。您的寫入和讀取模型也不需要相同。有很多原因讓您想要同時擁有兩者......
uj5u.com熱心網友回復:
我建議使用Microsoft 官方檔案中描述的關系,即,描述您的模型,就好像您不知道您正在使用 EF 核心一樣。一個優點是,如果您在后臺使用關系資料庫,它可以確保您的參考完整性保持不變。另一個是,您可以使用Include.
從這個意義上說,我建議不要自己管理物體的外鍵,因為它會導致資料完整性問題和從長遠來看需要延遲加載,因為您不能使用Include. 讓 EF Core 使用其默認值和自己的約定在后臺處理(外來和主)密鑰管理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/403424.html
標籤:
上一篇:.NETWindows表單應用程式mysql資料庫查詢
下一篇:格式化Serilog日志
