0

我正在使用 .NET Core 和 Entity Framework Core,需要创建一个应用程序,员工可以在其中创建 3 种类型的帖子:

  • 想法 - 讲述他认为可以改变组织的内容。它有道具:
    • 描述
    • 附件 ID
  • 文章请求 - 告诉我们需要一些东西。新的智能手机
    • 文章编号
    • 成本
  • 问题
    • 类别 ID

这三个都有一些共同的属性,它们是:Id、AddedDate、Responses(列表)、Notifications。每个响应都有评论列表。

我想知道写这个的正确方法是什么。

a)所以第一个选项 - 单独的类:

如果我将使用基类创建 3 个单独的类,那么我将最终为这 3 个帖子类型提供 3 个表,并且两者都有相同的 Id - 我的意思是会有 Id=1 的问题和 Id= 的想法1.

在 Response 类我不能引用它PostId,因为它实际上并不存在我会做这样的事情:

class BaseResponse<TPost> where TPost : BasePost {
    public int Id { get; set; }
    public string Message { get; set; }
    public User Author { get; set; }
    public TPost Post { get; set; }
}

class IdeaResponse : BaseResponse<Idea> {}
class ArticleRequestResponse : BaseResponse<ArticleRequest> {}
class QuestionResponse : BaseResponse<Question> {}

在 Context.cs 中:

public DbSet<Idea> Ideas { get; set; }
public DbSet<ArticleRequest> ArticleRequests { get; set; }
public DbSet<Question> Questions { get; set; }

public DbSet<IdeaResponse> IdeaResponses { get; set; }
public DbSet<ArticleRequestResponse> ArticleRequestResponses { get; set; }
public DbSet<QuestionResponse> QuestionResponses { get; set; }

所以还有 3 个响应类,然后是类似的通知和评论

b)第二个选项:1个具有可空属性和引用数据的类:

class Post {
    public int Id { get; set; }
    public DateTime AddedDate { get; set; }

    public PostType Type { get; set; { // enum

    public IdeaData IdeaData { get; set; } // != null when Type == PostType.Idea
    public ArticleRequestData ArticleRequestData { get; set; } // != null when Type == PostType.ArticleRequest
    public QuestionData QuestionData { get; set; } // != null when Type == PostType.Question
}

在这种情况下,我可以创建一个响应类、一个通知类和一个评论类。

或者也许还有其他选择?如果有不清楚的地方,请告诉我,我会更详细地解释。

4

0 回答 0