2015-11-05 41 views
5

我已經添加了一個數據庫視圖到我的實體模型。現在我正試圖將ObjectSet放入我的ObjectContext,這樣我就可以在我的應用程序中訪問該視圖。WPF實體無法創建視圖的ObjectSet?

對於常規表我ObjectSet應該是這樣的:

private ObjectSet<StarVendor> _StarVendor; 
public ObjectSet<StarVendor> StarVendor 
{ 
    get 
    { 
     if ((_StarVendor == null)) 
     { 
      _StarVendor = base.CreateObjectSet<StarVendor>("Stratus_X_TestEntities.StarVendors"); 
     } 
     return _StarVendor; 
    } 
} 

所以,我做我的查看相同的:

private ObjectSet<CatalogItemSearch> _CatalogItemSearch; 
public ObjectSet<CatalogItemSearch> CatalogItemSearch 
{ 
    get 
    { 
     if ((_CatalogItemSearch == null)) 
     { 
      _CatalogItemSearch = base.CreateObjectSet<CatalogItemSearch>("Stratus_X_TestEntities.CatalogItemSearch"); 
     } 
     return _CatalogItemSearch; 
    } 
} 

但代碼運行時我得到一個異常:

System.InvalidOperationException「實體集名稱 'Stratus_X_TestEntities.CatalogItemS earch'找不到「

我知道對於視圖,我不需要ObjectSet提供的添加/更新/刪除功能。

是否有替代套裝類型,我應該使用這個?

或者這個錯誤可能來自與它的觀點完全無關的事情嗎?

感謝

+0

據我瞭解這是Code First方法? – StepUp

+0

使用「從數據庫更新模型」功能將視圖拉入.edmx。我找不到一個有用的.tt文件來生成我的ObjectContext,所以這部分是用手寫的。所以它不完全是「代碼第一」,據我所知 – Shaboboo

+0

從數據庫更新模型是數據庫第一 –

回答

1

如果您正在使用CodeFirst你總是可以映射爲您映射表視圖(帶DbSet),然後它應該工作。

+0

使用「從數據庫更新模型」功能將視圖拉入.edmx中,無錯誤。我在正確的屬性上設置密鑰。在DbContext中,dbSet <>的生成方式與所有其他表相同。 要查詢數據,我爲每個實體使用了ObjectSet <>的ObjectContext。這是我遇到麻煩的地方; base.CreateObjectSet ( 「Stratus_X_TestEntities.CatalogItemSearch」);拋出異常 – Shaboboo

2

我想指出ObjectSet API和ObjectContext API是實體框架的舊API,通常現在不再使用它。

這是很早以前的實體框架4.0的一部分(請參閱Wikipedia: Entity Framework history)。

2011年發佈了實體框架版本4.1,並且從現在起推薦使用DbSetDbContext API。 實體框架的當前生產就緒版本是版本6,而版本7正在開發中。

我建議你使用的NuGet移動到實體框架6,你可以安裝到你的Visual Studio項目:EntityFramework 6.1.3

這裏是一個article其中有一個大約的差異章DbSet API帶來較舊的API 。看看「介紹DbContext & DbSet」一章。

+0

我給你賞金,因爲這個答案迄今爲止是最有幫助的。我設法將我的代碼移到EF 6,但現在,而不是一個不工作,沒有工作。同樣的錯誤。我希望這個錯誤信息不是那麼模糊,有這麼多可能的原因! – Shaboboo

+0

好吧,也許你可以發佈一個新問題,這次使用'DbSet'的新代碼,並指出你正在使用EF 6。 – Martin