簡體   English   中英

EF代碼優先和虛擬屬性

[英]EF code first and virtual properties

我有兩個表格ArticlesEvents ,我想為兩種類型的用戶提供評論功能。 困難的部分是我想使用導航屬性,該屬性返回屬於給定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將是ArticleEvent的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM