我现在要开始一个新的项目来帮助投诉。我已经把所有的领域都算出来了。但这样做,我意识到我需要超过一种类型的抱怨。他们是客户投诉,供应商投诉或缺陷投诉。它们共享许多相同的字段,但略有不同,因此我不确定如何在Server数据库和/或使用EF中设计这些字段。该应用程序将是一个使用ASP.NET MVC 4的C#应用程序,因此我可以首先利用代码,但正如我所说的,我不确定如何设计这些实体:
所有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)所以我的问题是:
谢谢
注意:还有更多的列(ID等)但为了这个例子,我把它缩短了。
发布于 2012-09-05 16:35:21
有几种方法可以首先在代码中实现继承,这完全取决于您希望如何在SQL中表示表。
是否需要针对所有类型的单一投诉表,其中一些字段根据其类型保留为空?你会用每个层次的表来做这个。
您想要一个包含公共字段的主投诉表,然后是基于类的包含额外列的关系表吗?你会用每种类型表来做这个。
如果您希望每个投诉类型都有一个表,那么每个表中都表示有公共字段吗?那是每种混凝土类型的表
就我个人而言,我可能会倾向于每种类型的表。下面是一个简短的例子:
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-05 16:35:03
是的,一般来说,EF代码优先策略是最好的选择。
您应该创建一个Complaint类,并将这个类使用(委托)到Supplier、Customer和Defect类。继承层次结构可能会损害您的设计可扩展性。总是偏爱组合而不是继承。
https://stackoverflow.com/questions/12285820
复制相似问题