无法使用部分类使用EF生成的DBContext类创建控制器

时间:2012-07-11 15:38:05

标签: asp.net-mvc-3 entity-framework-4 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... }
}

Everything编译所有精细和花花公子,但当我尝试创建一个控制器并使用CMDB_ModelConatiner作为上下文类(创建一个强类型控制器)时,我得到错误

  

生成'CMDB.Domain.Models.CMDB_DataModelContainer'时出错。尝试重建项目。

我删除了部分类,并且能够创建控制器。有什么想法会发生这种情况吗?

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

它在一个单独的项目中无关紧要。我在同一个项目中创建了一个带有DBcontext类和MVC3应用程序的测试项目,但仍然没有。

我想问一个问题是,在使用模型第一种方法时是否有人实际设置了存储库。在第一次使用模型时尝试应用此模式的问题后,我发现自己遇到了问题。

如果你想重新创建问题,只需制作一个MVC 3(或4,我使用3)。这就是我自己为重新创建它所做的测试。

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

  • 创建两个实体:Taco和Filling
  • 为每个添加“名称”标量属性。
  • 添加关联m&lt; ---&gt;米
  • 在models文件夹中创建一个名为“Partial”的新文件夹。
  • 添加一个新类 - 该类的名称应与Context类相同(如果您保留默认名称,应该是Model1Container)并且在同一名称空间中。

e.g。

public partial class Model1Container
{

}

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

1 个答案:

答案 0 :(得分:0)

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

我试过的一次我注意到一些奇怪的事情:我创建的部分类文件中出现了一个新的声明:

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

我只能推测VS被部分类文件搞糊涂了 - 它找到你创建的部分类文件,没有看到声明的DBSet,尝试添加它然后进入tizzy因为太多炸玉米饼

克里斯