2013-01-14 30 views
4

我是EF新手,我從EF5開始。單獨項目中的EF5模型無法看到DbContext方法

遵循Performance Considerations for Entity Framework 5的建議2.4.2將模型移動到單獨的程序集中...我創建了一個單獨的項目(我將其稱爲EfPrj)來管理我的Db上下文(稱爲MyDbContext)。

在我的域層(我將它稱爲DomainPrj)我使用EfPrj中的實體。問題是,在DomainPrj內我看不到從DbContext繼承的MyDbContext的成員。

例如,如果我想更新表用戶的代碼是:

void UpdateUser(User u) 
{ 
    MyDbContext db = new MyDbContext(); 
    //whatever is needed 
    db.SaveChanges(); 
} 

但在EfPrj它的工作原理沒有問題。在DomainPrj我不能看到的成員函數調用SaveChanges(),得到這個錯誤:

'MyDbContext' does not contain a definition for 'SaveChanges' and no extension method 'SaveChanges' ... could be found (are you missing a using directive or an assembly reference?) 

更新:只有 EfPrj ES與ORM數據庫,第一個模型的項目。 MyDbContext被默認定義如下EF5對象: 公共部分類MyDbContext:的DbContext { 公共MyDbContext() :基部( 「名稱= MyDbEntities」) { }

所以從的DbContext派生並是公開的。 DomainPrj參考EfPrj和MyDbContext db = new MyDbContext()工作沒有問題。

+0

不'MyDbContext'從'DbContext'獲得? –

+0

讓您在您的DomainPrj中引用了您的EfPrj,並且您的DbContext是一個公共成員 – Derek

+0

另一個顯而易見的問題是:您是否遇到有關引用「EntityFramework」程序集的編譯器錯誤? –

回答

12

您是否嘗試過從您的DomainPrj引用EntityFramework?

由於這些方法是在DbContext中定義的,而DbContext是在EntityFramework中定義的,所以您必須引用它。一般來說,如果你不僅要使用類,還要使用在程序集中定義的委託,方法,屬性等;你必須有一個參考該組件。

+0

DomainPrj引用EfPrj和'MyDbContext db = new MyDbContext()'可以毫無問題地工作。 – Alex

+1

使用NuGet添加引用工作正常 – Alex

0

對我來說,我不得不添加Microsoft.Data.Services.Client.dll

相關問題