0

我有一个接口定义为:

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

    string Save()
 }

我有名为 CMDB_DataModelContainer 的 DBContext 生成类。

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

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

一切都编译得很好而且花花公子,但是当我尝试创建一个控制器并使用 CMDB_ModelConatiner 作为上下文类(创建一个强类型控制器)时,我得到了错误

生成“CMDB.Domain.Models.CMDB_DataModelContainer”时出错。尝试重建您的项目。

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

此外,DBContext 类位于一个单独的项目中。

它在一个单独的项目中的事实并不重要。我在同一个项目中创建了一个带有 DBcontext 类和 MVC3 应用程序的测试项目,但仍然不行。

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

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

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

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

例如

public partial class Model1Container
{

}

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

4

1 回答 1

0

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

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

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

我只能推测 VS 被部分类文件弄糊涂了——它找到了你创建的部分类文件,没有看到声明的 DBSet,尝试添加它,然后因为玉米饼太多而感到头晕目眩。

克里斯

于 2012-07-20T07:47:57.643 回答