2015-06-15 21 views
0

我在我的實體框架模型中有一個子對象。這樣實體框架的子類,現在需要Id/Key?

public MyModel() { 
    public long Id { get; set; } 
    public string Name { get; set; } 
    public MyModelReference Reference { get; set; } 
} 

public MyModelReference() { 
    public bool IsActive { get; set;} 
    public bool Name { get; set;} 
} 

這工作得很好,在SQL東西它創建1臺名爲爲MyModel,並在那裏我有以下幾列

標識

名稱

Reference_IsActive

參考名稱

這很好,因爲在我的課上,所有與MyModel相關的參考資料放在我的MyModelReference類中,我可以通過訪問MyModel中的Reference屬性來訪問這些屬性。漂亮和整潔。

現在我在我的庫中有其他模型,我想在MyModel和MyOtherModel之間添加一個鏈接,但由於此屬性特別針對引用,因此我想將它添加到MyModelReference類中。所以我改變它太像這樣

public MyOtherModel() { 
    public long Id { get; set; } 
    public string Name { get; set; } 
} 

public MyModelReference() { 
    public bool IsActive { get; set;} 
    public bool Name { get; set;} 
    public long OtherModelId { get; set; } 
    public MyOtherModel OtherModel { get; set; } 
} 

現在,出於某種原因,當我做到這一點,運行命令

-update-database 

我得到一個錯誤,像這樣

的EntityType「ModelReference」有沒有定義密鑰。定義此EntityType的關鍵字。 ModelReferences:EntityType:EntitySet'ModelReferences'基於沒有定義鍵的類型'ModelReference'。

爲什麼我必須添加一個鍵到子類,當父類有Id/Key定義?我有不正確的設置嗎?

我希望這個設置給我一個表有以下的列

標識

名稱

Reference_IsActive

Reference_Name

Reference_OtherModelId

+0

對不起不知道你是什麼意思?我正在使用我自己的類型? – Gillardo

+0

按照慣例,沒有指定主鍵的類型被視爲複雜類型。 Code First有些情況下不會檢測到複雜類型。請嘗試明確定義您的MyModelReference爲複雜類型。在您的模型配置上添加:modelBuilder.ComplexType () –

+0

轉到您的上下文,找到OnModelCreating(DbModelBuilder modelBuilder)並添加modelBuilder.ComplexType ()。 –

回答

0

如果您沒有在EF will infer by convention類型上定義的類型爲複雜類型的鍵,那麼它與MyModelReference一樣。

不幸的是,你不能有一個複雜的類型關聯/關係:

複雜類型不能參與關聯。關聯的任何一端都不能是複雜類型,因此無法在複雜類型上定義導航屬性。

https://msdn.microsoft.com/en-us/library/vstudio/ee382831(v=vs.100).aspx

+0

他的模型中沒有導航屬性。有一個複雜的類型。 –

+0

沒有定義虛擬修飾符。 –

+0

@ViniciusGonçalves:我的意思是最初 – jjj