【问题标题】:Cannot Create Controller with EF Generated DBContext Classes using Partial Classes无法使用部分类创建带有 EF 生成的 DBContext 类的控制器
【发布时间】:2012-07-20 15:47:57
【问题描述】:

我有一个接口定义为:

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 作为上下文类。瞧,转载。是的,我喜欢炸玉米饼。

【问题讨论】:

  • 包含您的CMDB_DataModelContainer : ICMDBContext文件名 是什么?
  • CMDB_Model.cs。我不相信文件名在 C# 中像在 Java 中那样重要。我尝试将文件重命名为 DBContext 生成的文件。还是不行。
  • 您在哪里实现了 DbSet 属性访问器? ( DbSet {get...} 的实际代码)另外,您可能想在此处使用 IDbSet (可能没有区别,但它是一种抽象,而不是您所指的具体实现)
  • @Adam 属性访问器定义在 T4 生成的名为 CMDB_DataModelContainer 的 DbContext 类中。我创建了部分类 CMDB_DataModelContainer 来添加接口来设置存储库的使用。我发现不是接口本身的问题,而是使用部分类与 T4 生成的 DBContext 类。无论我是否实现接口,如果它是一个空白的部分类,我仍然会收到错误。
  • 在这里查看我的会话,可能会有所帮助。虽然我没有使用 t4,但使用 EF 电动工具对您的上下文进行逆向工程。 channel9.msdn.com/Events/TechEd/NorthAmerica/2012/DEV215

标签: asp.net-mvc-3 entity-framework-4 dbcontext


【解决方案1】:

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

有一次我尝试发现一些奇怪的东西:一个新的声明出现在我创建的部分类文件中:

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

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

克里斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多