[英]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.