Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 无法使用分部类使用EF生成的DBContext类创建控制器_Asp.net Mvc 3_Entity Framework 4_Dbcontext - Fatal编程技术网

Asp.net mvc 3 无法使用分部类使用EF生成的DBContext类创建控制器

Asp.net mvc 3 无法使用分部类使用EF生成的DBContext类创建控制器,asp.net-mvc-3,entity-framework-4,dbcontext,Asp.net Mvc 3,Entity Framework 4,Dbcontext,我有一个接口定义为: public interface ICMDBContext { DBSet<Building> {get;} DBSet<Room> {get;} more DBSet methods... string Save() } 一切都编译得很好,但是当我尝试创建一个控制器并使用CMDB_ModelConatiner作为上下文类(创建一个强类型控制器)时,我得到了一个错误 生成“CMDB.Domain.Models.C

我有一个接口定义为:

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

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

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

我删除了部分类,并能够创建控制器。你知道为什么会这样吗

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

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

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

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

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

  • 创建两个实体:Taco和Filling
  • 将“名称”标量属性添加到每个
  • 添加关联m
  • 在models文件夹中创建一个名为“Partial”的新文件夹
  • 添加一个新类-该类的名称应与上下文类的名称相同(如果保留默认名称,则应为Model1Container),并位于同一命名空间中
e、 g


-添加一个新的控制器“TacoController”,作为强类型,与Taco相对,并使用Model1Container作为上下文类。瞧,复制了。是的,我喜欢吃玉米卷。

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

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

public DbSet<Taco> Taco { get; set; }
公共数据库集Taco{get;set;} 我只能推测VS被部分类文件弄糊涂了——它找到了您创建的部分类文件,没有看到声明的DBSet,试图添加它,然后因为太多的玉米卷而陷入混乱


Chris

包含您的
CMDB_数据模型容器的文件名是什么:ICMDBContext
?CMDB_Model.cs。我不相信文件名在C#中像在Java中一样重要。我尝试将该文件重命名为DBContext生成的文件。还是不行。您在哪里实现了DbSet属性访问器?(DbSet{get…}的实际代码)您也可以在这里使用IDbSet(可能没有什么区别,但它是一个抽象而不是您所指的具体实现)@Adam属性访问器是在T4生成的名为CMDB_DataModelContainer的DbContext类中定义的。我创建了部分类CMDB_DataModelContainer,以添加接口来设置存储库的使用。我发现接口本身并不是问题所在,而是T4生成的DBContext类使用了分部类。无论我是否实现了接口,如果它是一个空白的部分类,我仍然会得到错误。在这里查看我的会话,可能会有所帮助。虽然我不使用t4,但请使用EF power tools对您的环境进行反向工程。channel9.msdn.com/Events/TechEd/NorthAmerica/2012/DEV215
public partial class Model1Container
{

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