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),并位于同一命名空间中
-添加一个新的控制器“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; }