C# 如何使用实体框架设计评论系统?

C# 如何使用实体框架设计评论系统?,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在开发一个网站,用户可以在其中对事物进行评论,这些事物是使用实体框架的完全独立的类型。例如,用户可以评论: 照片 录像带 评论 等等 所以,我想要一个comment类,它对写评论的用户和写评论的对象(图片、视频、评论)具有导航属性 public class User { public AccountInfo AccountInfo; public List<Comment> Comments; } public class Comment { pub

我正在开发一个网站,用户可以在其中对事物进行评论,这些事物是使用实体框架的完全独立的类型。例如,用户可以评论:

  • 照片
  • 录像带
  • 评论
  • 等等
所以,我想要一个comment类,它对写评论的用户和写评论的对象(图片、视频、评论)具有导航属性

public class User
{
    public AccountInfo AccountInfo;
    public List<Comment> Comments;
}

public class Comment
{
    public int Id;
    public User WrittenBy;
    public Thing(?) WrittenTo; // How should this part be?
}
公共类用户
{
公共会计信息;
公开名单评论;
}
公开课评论
{
公共int Id;
公共用户写入;
公事(?)写;//这部分该怎么写?
}

其目的是从用户对象访问注释,然后获取将注释写入的对象。我可以从诸如Commentable之类的基类派生所有的东西类,然后使用继承。但我想知道是否有一个优雅的解决方案

首先,我会尝试从应用程序的业务逻辑中抽象出特定于EF的类,可能是通过创建包装器类。它将使以下方法变得更容易,更不用说它具有将核心应用程序代码与数据存储机制分离的优势:

考虑创建一个公共祖先类型/接口

public interface ICommentable {
 // basically a marker interface like Serializable
}

public class Picture : ICommentable {
 // etc
}

public class Comment {
 // etc
 public ICommentable _commentAttachedTo;
}
对于某些祖先类也可以做同样的事情,例如视频、图片,它们都是从一种称为“内容”的抽象类型派生而来的,您可以在创建评论时将其用作参考,因为推断所有视频、图片等都是一种内容类型

这真的取决于你要求它有多灵活,因为它可以是简单的(如上所述),或者如果你说写CMS的话,它可以是更复杂/抽象的

希望这对你有用