[英]Entity Framework 5 Code First using ComplexType Entity or standard one
我正在使用EF 5
和Code First
ASP.NET MVC 4
应用程序。 我的用户界面的一部分是这三个视图:
每个菜单在其中加载不同的信息。 但是,这三个菜单的信息都表示一个下载链接,如下所示:
只是有些文件引用了Taxes
, Reports
引用了其他文件, Contracts
引用了一些文件,但在核心中,它是相同的下载链接,具有相同的信息和全部。
由于存在很多相似之处,因此我决定使我的实体像这样:
public class Menu
{
public int MenuID { get; set; }
public string Name { get; set; }
public bool IsContract { get; set; }
public bool IsTaxes { get; set; }
public bool IsReport { get; set; }
public int? ParentID { get; set; }
public virtual ICollection<Document> Documents { get; set; }
}
在哪里Documents
保留了实际文件的信息,例如名称和我需要的其他内容。 但是后来我看到了使用ComplexTypes
选项,我开始怀疑。 最好使用ComplexType
重做我的实体,因为我刚刚看到了该选项,但是我如何才能做到这一点,但我不确定它的工作原理。
我看到的另一个选择是对Taxes
, Reports
和Contracts
具有不同的主体,但这似乎不是最佳选择。
复杂类型是一种特殊的1:0..1映射,因此我看不到它如何应用于您的1:n关联。
如果这或多或少是严格的分类,那么在Taxes
, Reports
和Contracts
中将Document
子类型化当然是有意义的。 但是,如果文档类型来来去去,或者文档频繁更改类型,则子类化是没有用的。 但是无论如何,是Document
知道其类型 ,而不是菜单。
Menu
是UI元素,并且不应包含Document
。 业务域应完全独立于UI实现。
在控制器中,您可以连接业务域(模型)和视图。 因此,当我按下“合同”按钮时,我想控制器将收集合同文件。 这可以通过以下方式完成
context.Douments.OfType<Contract>()
要么
context.Documents.Where(d => d.Type == "Contract")
取决于您是否将应用子类型化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.