![](/img/trans.png)
[英]Navigation properties in EF41 with code first, without having a foreign key?
[英]EF Code First foreign key definition / left join / navigation properties?
假設我有3張桌子:
[Table("Comments")]
public class Comment {
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("Users")]
public int UserId { get; set; }
public virtual Users Users { get; set; }
public string Text { get; set; }
}
[Table("Users")]
public class Users {
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string UserName { get; set; }
}
[Table("CommentAgree")]
public class CommentAgree {
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int CommentId { get; set; }
public int UserId { get; set; }
}
用戶發表評論,其他用戶可以“同意”該評論,有點像Facebook的“ like”系統。 我正在使用lambda進行查詢,我可以這樣做:
var query = db.Comments.Select(c => new {
c.Id,
c.Users.UserName,
c.Text
});
如何在Comment.Id = CommentAgree.CommentId
上創建對Comment.Id = CommentAgree.CommentId
? 我可以用Lambda編寫聯接,但我需要將其作為左聯接,因為沒人會同意該評論,但我仍然希望其顯示。
我想以正確的方式進行操作,因此我願意接受通過外鍵,lambda聯接,導航屬性...或其他方式進行操作的建議?
這可能嗎?
謝謝
最好的方法可能是使用Entity Framework的功能並創建導航屬性,而不是顯式使用LINQ僅為相關數據執行聯接。
如果僅出於訪問數據的目的而對類型進行了調整,則將導航屬性以及關系的兩端都添加到關系的兩端可能是一個好主意。
Comment
上的集合導航屬性應實現ICollection
(例如List<CommentAgree>
),並且CommentAgree
類型上將具有類型為Comment
的引用導航屬性。
然后,您必須使用數據注釋或(最好是)流暢的API來定義映射中的關系。
要加載相關數據,可以使用延遲加載,也可以使用渴望加載(使用Include
擴展方法),也可以使用實體條目信息中的顯式加載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.