MVC3 - 使用Entity框架设置Controller时出错

时间:2011-06-20 13:41:29

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

我要经历的步骤......

  • 添加新的ADO.NET实体数据模型>从DB生成>将新连接字符串设置为adventureworks db>下一个>选择表“DatabaseLog”>完。验证DatabaseLog在edmx视图中可见。

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

  • 模板
    具有读/写操作和视图的控制器,使用实体

  • 模特班
    AdventureWorksDWEntities

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

  • 查看
    剃刀

  • 单击“添加”。

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

  • System.Data.Edm.EdmEntityeType:EntityType'AdventureWorksDWEntities'没有定义键。定义此实体类型的密钥。

  • System.Data.Edm.EdmEntitySet:EntityType:EntitySet'AdventureWorksDWEntities'基于没有定义键的'AdventureWorksDWEntities'类型。

<小时/> 我再次尝试使用AdventureWorks(而不是AdventureWorksDW),这一次它起作用了。但是,我仍然不明白在生成控制器时要选择什么。我有3个选项:

模板
在这里,我使用Entity选择了具有读/写操作和视图的Controller。这很容易理解。我希望为我生成表格,所以我选择了这个选项。

模型
这就是我想要建模的东西。在这种情况下,我想模拟“部门”表。所以我选择了部门。

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

4 个答案:

答案 0 :(得分:3)

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

中的值
<add name="NamedEntitiesCs1"

还包含您要生成的模型。

答案 1 :(得分:2)

我发现了问题是什么......

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

1.YeagerTech 2.YeagerTechWcfService 3.YeagerTechModel

无论如何,即使我的wcf服务引用了我的模型,启动项目(1)也不够“智能”,无法识别创建Controller的元数据。在这种情况下,您必须包含对包含edmx模型的项目的引用。

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

答案 2 :(得分:1)

我找到了答案,模型类应该有一个密钥,即ID属性,即  public int ID {get;组;} 保存更改和构建或重建解决方案。 应该可以解决这个问题。

答案 3 :(得分:0)

您的模型中的财产必须声明为公开。重建并重试,它应该工作