[英]EF code first and virtual properties
我有兩個表格Articles
和Events
,我想為兩種類型的用戶提供評論功能。 困難的部分是我想使用導航屬性,該屬性返回屬於給定EF對象的注釋。
public class Article
{
public virtual ICollection<Comment> Comments { get; set; }
/* more properties here */
}
public class Event
{
public virtual ICollection<Comment> Comments { get; set; }
/* more properties here */
}
public class Comment
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CommentId { get; set; }
public string Msg { get; set; }
public DateTime SentAt { get; set; }
public int TargetId { get; set; }
public CommentTargeType TargetType { get; set; }
}
public enum CommentTargeType
{
Article,
Event
}
如您所見, TargetId
將是Article
或Event
的ID,而TargetType
是區分這兩種類型。 那么,有什么辦法可以做到這一點? 還是最好改為創建ArticleComments和EventComments類型?
您當前的設計實質上是使用對象中的相同字段作為2個表中的外鍵。 我建議不要這樣做,因為數據庫將無法強制執行任何約束或進行完整性檢查。
您可以添加兩個int?
字段,一個稱為ArticleId,一個稱為EventId,以完成所需的操作。 既然類型是int?
它們將是數據庫中的可為空字段。
我什至更進一步,並使用ForeignKey
屬性,以便EntityFramework知道這一點並為您創建外鍵。
[ForeignKey("Article")]
public int? ArticleId { ... }
public virtual Article Article { get; set; }
[ForeignKey("Event")]
public int? EventId { get; set; }
public virtual Event Event { get; set; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.