繁体   English   中英

使用ComplexType实体或标准实体的Entity Framework 5 Code First

[英]Entity Framework 5 Code First using ComplexType Entity or standard one

我正在使用EF 5Code First ASP.NET MVC 4应用程序。 我的用户界面的一部分是这三个视图:

简单菜单图片

每个菜单在其中加载不同的信息。 但是,这三个菜单的信息都表示一个下载链接,如下所示:

下载链接

只是有些文件引用了TaxesReports引用了其他文件, 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重做我的实体,因为我刚刚看到了该选项,但是我如何才能做到这一点,但我不确定它的工作原理。

我看到的另一个选择是对TaxesReportsContracts具有不同的主体,但这似乎不是最佳选择。

复杂类型是一种特殊的1:0..1映射,因此我看不到它如何应用于您的1:n关联。

如果这或多或少是严格的分类,那么在TaxesReportsContracts中将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM