2013-05-08 90 views
3

我有一個理解複雜的數據類型與ASP MVC和C#實體的問題。我開始通過創建以下類型,這並不意味着是一個實體(DB表):模型/實體與複雜類型

public class Period : IPeriod 
{ 
    public DateTime From { get; set; } 
    public DateTime To { get; set; } 
} 

我添加了這個類型的模型:

public class Event 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public Period EventTime { get; set; } 
} 

這工作得很好。它似乎明白Period是一個複雜的類型,但不是一個實體。它只是將EventTime_From和EventTime_To列添加到Event表中。

然而,我通過刪除接口,將類移動到不同的名稱空間並向類中添加方法,給Period類型增加了一些複雜性。突然間,當試圖重建數據庫時,它突然被解釋爲一個實體類型,因此拋出了一個缺少主鍵的異常。

這是什麼系統?何時將類視爲複雜類型,以及何時將它們視爲實體?

+0

不是修改Period,而是嘗試在實現中創建Period的子類,或者讓Period成爲部分類並將實現放在另一個部分的某處? – qJake 2013-05-08 20:02:03

+0

雖然我有類似問題的一些經驗,但我並不熟悉Entity模型生成器幕後發生的事情。這些模型具有資源文件,它們將對象定義爲表映射。自動化模型生成器做出了一個不正確的推理(它試圖將Period映射到某個表或者創建一個,如果它不存在的話),您必須手動修正其中一個資源文件。 – evanmcdonnal 2013-05-08 20:02:05

回答

2

這是很難說究竟是怎麼回事不知道你所做的所有的變化,但你總能EF明確表示Period是一個複合型的或者與ComplexType屬性標記,或通過使用流利的映射:

modelBuilder.ComplexType<Period>(); 
+0

啊。大。正是我需要的。謝謝。 – 2013-05-08 21:08:45