0

我目前要开始一个新项目来帮助处理投诉。我已经计算出所有领域等。但在这样做时,我意识到我需要不止一种类型的投诉。它们是客户投诉、供应商投诉或缺陷投诉。它们共享许多相同的字段,但略有不同,因此我不确定如何在 SQL Server 数据库和/或使用 EF 中进行设计。该应用程序将是一个使用 C# 的 ASP.NET MVC 4 应用程序,因此我可以利用 Code First,但正如我所说,我不确定如何设计这些实体:

所有 3 种投诉类型共享以下列:

ComplaintType (int), Department (int), 
Code (int), DefectReference (string), Cause (int)

客户投诉和供应商投诉共享以下列:

ComplaintText (string), Orders (collection), Rectification (string)

以下是客户投诉特有的列:

AccountNumber (string), CustomerName (string)

最后,以下是供应商投诉特有的字段:

SupplierNumber (string), SupplierName (string)

所以我的问题是:

  1. 我将如何处理这个创建我的模型以与 EF Code First 或
  2. 我将如何使用 SQL Server 进行设计?

谢谢

注意:还有更多列(ID 等),但我在本例中将其缩短了。

4

2 回答 2

2

有几种方法可以在 Code First 中实现继承,这完全取决于您希望在 SQL 中表示的表的方式。

您是否想要一个针对所有类型的投诉表,其中某些字段根据它是什么类型而保留为空?为此,您将使用Table Per Hierarchy

您是否想要一个包含公共字段的主投诉表,然后是包含基于类的额外列的关系表?为此,您将使用每种类型的表。

如果您希望每个投诉类型有一个表,并且每个表中都表示公共字段?这是每种具体类型的表格

就个人而言,根据您所拥有的,我可能会倾向于 Table Per Type。这是一个简短的示例:

public abstract class Complaint 
{
    public int ComplaintType { get; set; }
    public int Department { get; set; }
    public int Code  { get; set; }
}

[Table("CustomerComplaint")]
public class BankAccount : Complaint
{
    public string ComplaintText { get; set; }
    public string Rectification { get; set; }
}

[Table("SupplierComplaint")]
public class SupplierComplaint: Complaint
{
    public string SupplierNumber { get; set; }
    public string SupplierName { get; set; }
}
于 2012-09-05T16:35:21.280 回答
1

是的,通常 EF Code First 策略是最佳选择。

您应该创建一个Complaint类并将该类使用(委托)到Supplier,CustomerDefect类中。继承层次结构可能会损害您的设计可扩展性。总是喜欢组合而不是继承。

于 2012-09-05T16:35:03.727 回答