2012-01-27 81 views
0

衝突的抓起這個從樣品:EntityFramework.dll的DbContext與Microsoft.data.Entity.CTP的DbContext

protected override ObjectContext CreateDataSource() 
    { 
     NorthwindContext nw = new NorthwindContext(); 

     // Configure DbContext before we provide it to the 
     // data services runtime. 
     nw.Configuration.ValidateOnSaveEnabled = false; 

     // Get the underlying ObjectContext for the DbContext. 
     var context = ((IObjectContextAdapter)nw).ObjectContext; 

     // Return the underlying context. 
     return context; 
    }  

修改了它使用的是我有我的項目中的DbContext類。

編輯:澄清,我從一個的DbContext類只是作爲樣品做鑄造:

public class NorthwindContext : DbContext 
{ 
// Use the constructor to target a specific named connection string 
public NorthwindContext() 
    : base("name=NorthwindEntities") 
{ 
    // Disable proxy creation as this messes up the data service. 
    this.Configuration.ProxyCreationEnabled = false; 

    // Create Northwind if it doesn't already exist. 
    this.Database.CreateIfNotExists(); 
} 

運行代碼給我就行了鑄造的DbContext的錯誤:

無法投入'MyProject.MyDbContext'類型的對象來鍵入'System.Data.Entity.Infrastructure.IObjectContextAdapter'。

儘管實現的DbContext IObjectContextAdapter:

public class DbContext : IDisposable, IObjectContextAdapter 

我已經在這裏發現了幾個問題,對SO和其他谷歌搜索源,但沒有解決方案,我已經找到了工作。

我正在使用實體框架4.2,試圖更新到4.3測試版,我不確定是否卡住。

總體目標是將WCF中的數據作爲DataService提供。

更新:進一步挖掘我發現有什麼之間我的DbContext是(從EntityFramework.dll)和WCF項目(從Microsoft.data.Entity.CTP)

類型的歧義問題不知道如何從這裏得到我想要的...

+0

你能檢查你的NorthwindContext是不是一個ObjectContext本身嗎? – ivowiblo 2012-01-27 20:01:17

+0

@ivowiblo編輯澄清。 – KenEucker 2012-01-27 20:12:02

+0

是否有可能對兩個不同的EntityFramework.dll程序集有兩個不同的引用?看起來你有兩個版本的IObjectContextAdapter,一個不能轉換爲另一個版本。確保你只有一個EntityFramework.dll版本。我認爲WCF數據服務(它是你嘗試的十月CTP)應該與最新版本的EntityFramework一起工作... – Pawel 2012-01-27 23:46:19

回答

0

只是提醒,這裏的問題是EntityFramework.dll和Microsoft.Data.Entity.CTP之間的歧義導致我爲我的DataInitializer DbContext失去功能。

我在這裏通過更換我初始化程序解決了這個問題:

public class MyDataInitializer : RecreateDatabaseIfModelChanges<MyData> 
{ 
    public void Seed(MyData context) 

要:

public class MyDataInitializer : IDatabaseInitializer<MyData> 
{ 
    public void InitializeDatabase(MyData context) 

現在我可以訪問我的DataService。

只有一個