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 MVC3-使用实体框架设置控制器时出错_Asp.net Mvc 3_Entity Framework 4 - Fatal编程技术网

Asp.net mvc 3 MVC3-使用实体框架设置控制器时出错

Asp.net mvc 3 MVC3-使用实体框架设置控制器时出错,asp.net-mvc-3,entity-framework-4,Asp.net Mvc 3,Entity Framework 4,我走过的步骤 添加新ADO.NET实体数据模型>从数据库生成>设置新连接字符串到adventureworks数据库>下一步>选择表数据库日志>完成。验证DatabaseLog在edmx视图中是否可见 右键单击控制器>添加控制器 带有读/写操作和视图的TemplateController,使用实体 模范班 冒险工作实体 上下文 新建数据上下文>接受默认名称 看法 剃刀 单击添加 产生错误: 无法检索“DatabaseDocumentor.models.AdventureWorksDWEntitie

我走过的步骤

添加新ADO.NET实体数据模型>从数据库生成>设置新连接字符串到adventureworks数据库>下一步>选择表数据库日志>完成。验证DatabaseLog在edmx视图中是否可见

右键单击控制器>添加控制器

带有读/写操作和视图的TemplateController,使用实体

模范班 冒险工作实体

上下文 新建数据上下文>接受默认名称

看法 剃刀

单击添加

产生错误: 无法检索“DatabaseDocumentor.models.AdventureWorksDWEntities”的元数据

System.Data.Edm.EdmentyType:EntityType“AdventureWorksDWEntities”未定义键。定义此entitytype的键

System.Data.Edm.EdmentySet:EntityType:EntitySet“AdventureWorksDWEntities”基于未定义键的类型“AdventureWorksDWEntities”

我再次尝试使用AdventureWorks而不是AdventureWorksDW,这次成功了。但是,我仍然不明白在生成控制器时选择什么。我有3个选择:

模板 在这里,我使用实体选择了具有读/写操作和视图的控制器。这很容易理解。我想为我生成表,所以我选择了这个选项

模型 这就是我想要的模型。在本例中,我希望对Department表进行建模。所以我选择了这个部门

上下文
这个对我来说太模糊了。我选择了*名称*实体。这是web.config连接字符串区域中的值。为什么我需要选择我的连接字符串作为上下文?我只知道上下文是一个对象,我用它来访问C中的实体。所以,在这里,我很难想象它。是否需要始终为上下文选择连接字符串?

如果未从下拉列表中正确选择上下文,则可能会出现此问题。上下文应该是存储在web.config中的值

<add name="NamedEntitiesCs1"

它还包含您要生成的模型。

我找到了问题所在

我在一个解决方案中使用了一个3层架构,用于以下每个项目

1.YeagerTech 2.YeagerTechWCF服务 3.1技术模型

不管怎样,即使我的wcf服务引用了我的模型,启动项目1也不足以识别元数据来创建控制器。在这种情况下,必须包含对包含edmx模型的项目的引用


您还必须确保connectionstring也通过web.config文件驻留在启动项目1中,以便获得元数据的连接。

我找到了答案,模型类应该有一个键,即ID属性,即 公共int ID{get;set;} 保存更改并生成或重新生成解决方案。
这应该可以解决。

模型中ID的属性必须声明为公共。重新构建并重试,它应该可以工作

重复@Eranga-该答案既不能纠正我的问题,也不能解决我更新的问题。我知道在一些ORM的表格上需要密钥。亚音速也一样。这不是我的问题。不是dup。您指定了PK吗?如果您不给出PK,EF或nHibernate如何唯一标识实体?是的,它没有回答您的第二个问题DB是由Microsoft为测试而创建的AdventureWorks。这些表已经设置了键。我现在可以正确地生成项目而不会出错。我唯一剩下的问题是关于上下文解释的更新。最初的问题是我没有选择正确的上下文。连接字符串是根据运行应用程序的上下文自动发现的。由于上下文不是“是”,因此需要在Web.Config中定义连接字符串。您不需要自动发现连接字符串,但如果执行自定义操作,则需要执行自定义操作-