0

我有两个表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
}

如您所见,theTargetId将是 theArticle或the 的 id,Event而 theTargetType是区分这两种类型的。那么,有没有办法做到这一点?或者创建一个 ArticleComments 和一个 EventComments 类型会更好吗?

4

1 回答 1

1

您当前的设计本质上是使用对象中的相同字段作为 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; }
于 2013-02-22T18:03:55.470 回答