2011-03-21 115 views
5

我有一個不同程序集的子類與其基類。父母是用於EF代碼優先的POCO類。實體框架代碼第一個和多個程序集

當我試圖繼承的類的實例添加到數據庫中,我得到InvalidOperationException異常:「對象映射找不到與身份‘Foo.Bar.MyInheritedClass’類型」。

它工作正常,如果子類是在同一組件作爲基類。

在普通的EF solution seems to be中調用ObjectContext.MetadataWorkspace.LoadFromAssembly(assembly)。但我無法弄清楚這與Code First有何關係。

有什麼建議嗎?

我使用實體框架4.1 RC。

+1

爲什麼你仍然不能調用該函數? 我沒有執行過檢查,但基於一些快速搜索,您應該能夠使用'dbContext.MetadatWorkspace'從'DbContext'中訪問'MetadataWorkspace'。這不行嗎? – 2011-03-21 14:59:08

+0

是的,您可以將DbContext轉換爲IObjectContextAdapter並檢索其基礎ObjectContext(請參閱:http://weblogs.asp.net/jgalloway/archive/2011/01/21/fix-wcf-data-service-with-entity-framework -code先的DbContext-沒有按叔接受-updates.aspx)。 – 2011-03-23 10:01:05

+0

這讓我嘗試MetadataWorkspace.LoadFromAssembly(),但它沒有解決我的問題:( – 2011-03-23 10:01:56

回答

3

我解決了這個問題,它繼承自第一個集合的DbContext,爲派生類添加一個DbSet <>,然後爲派生類添加新的派生類型實例。

在MSDN論壇

發佈代碼here.

+0

這是一個廢話解決方案 – 2016-06-01 11:08:07

2

我知道這個帖子是有點老了,但我可以這樣使用@戴夫的構造函數中的recomendation做到:

public Context() { 
    ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(
     System.Reflection.Assembly.GetAssembly(
      typeof(--[Inherited DbContext]--))); 
} 
1

我很新到EF(Entity Framework 4),當我在模型中進行更改時,我得到了同樣的異常。

我的問題竟然是,我不知道EF需要對所有的導航屬性所有名字的同意,不僅是他們的類型。例如,如果有一個名爲foo的導航屬性,則需要在相應的類中使用同名的聲明變量。

相關問題