2013-01-14 31 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

相关问题