2012-07-11 100 views
0

我已经定义了一个接口:无法创建EF生成的DbContext类控制器

public interface ICMDBContext 
{ 
    DBSet<Building> {get;} 
    DBSet<Room> {get;} 
    more DBSet methods... 

    string Save() 
} 

我有产生的DbContext名为CMDB_DataModelContainer类。

我有一个部分类CMDB_DataModelContainer它实现ICMDBContext它看起来像这样(是的,两者在同一个命名空间):

public partial class CMDB_DataModelContainer : ICMDBContext 
{ 
    string Save() { implemenation... } 
} 

一切编译所有罚款和花花公子,但是当我尝试创建一个控制器和使用CMDB_ModelConatiner作为上下文类(创建一个强类型的控制器)我得到的错误

有错误发生“CMDB.Domain.Models.CMDB_DataModelContainer”。尝试重建您的项目。

我删除了部分类,并能够创建控制器。任何想法为什么会发生?

要添加,DBContext类位于单独的项目中。

它是在一个单独的项目并不重要。我在同一个项目中创建了一个包含DBcontext类和MVC3应用程序的测试项目,但仍然不成功。

我想问一个问题,如果有人在使用Model第一种方法时实际设置了存储库。我发现自己遇到问题后,尝试应用这种模式时,首先使用模型。

如果您想重新创建问题,请创建一个MVC 3(或4,我使用了3)。这是我为自己重新创建测试所做的。

添加一个新的ADO.Net实体数据模型。

  • 创建两个实体:塔克和灌装
  • “名称”标属性添加到每个。
  • 添加关联m < ---> m
  • 在models文件夹中创建一个名为“Partial”的新文件夹。
  • 添加一个新类 - 该类应该与Context类相同(如果您保留默认名称,它应该是Model1Container)并且位于相同的命名空间中。

例如

public partial class Model1Container 
{ 

} 

- 添加一个新的控制器“TacoController”为强类型对,你猜对了,塔可,并使用Model1Container作为上下文类。 Voila转载。是的,我喜欢炸玉米饼。

+0

什么*文件名*包含你的'CMDB_DataModelContainer:ICMDBContext'? – 2012-07-11 17:09:47

+0

CMDB_Model.cs。我不相信C#中的文件名与Java中的文件名相关。我试着将文件重命名为DBContext生成的文件。仍然没有去。 – Erik 2012-07-11 17:58:27

+0

你在哪里实现了你的DbSet属性访问器? (DbSet的实际代码为 {get ...})你也可能想在这里使用IDbSet(可能没有什么区别,但它是抽象的,而不是你指的具体实现) – 2012-07-11 19:19:26

回答

0

正如您可能已经发现的,删除(/重命名)部分类,创建控制器然后恢复部分类似乎是一个适当的解决方法。至于为什么:

一个时代的我想我发现了一些奇怪:一个新的声明曾经出现在我会创造局部类文件:

public DbSet<Taco> Taco { get; set; } 

我只能猜测,VS是越来越糊涂了通过部分类文件 - 它发现你创建的部分类文件,没有看到DBSet声明,尝试添加它,然后变得眩晕,因为这是太多玉米饼。

Chris