簡體   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