【问题标题】:MVC3 - Error setting up Controller with Entity frameworkMVC3 - 使用实体框架设置控制器时出错
【发布时间】:2011-06-20 13:41:28
【问题描述】:

我经历的步骤...

  • 添加新的 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 个选项:

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

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

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

【问题讨论】:

  • @Eranga - 该答案不能纠正我的问题,也不能解决我更新的问题。我知道某些 ORM 中的表需要密钥。在 SubSonic 中也是如此。那不是我的问题。不是重复。
  • 您指定了 PK 吗?如果您不提供 PK,EF 或 nHibernate 如何唯一标识实体?是的,它没有回答你的第二个问题
  • 数据库是 Microsoft 为测试而创建的 AdventureWorks。表已经键入。我现在可以正确生成项目而不会出错。我剩下的唯一问题是有关上下文解释的更新。最初的问题是我没有选择正确的上下文。

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


【解决方案1】:

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

<add name="NamedEntitiesCs1"

其中还包含您要生成的模型。

【讨论】:

    【解决方案2】:

    我发现了问题所在...

    我有一个 3 层架构,我在一个解决方案中与以下每个项目一起使用。

    1.YeagerTech 2.YeagerTechWcfService 3.YeagerTechModel

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

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

    【讨论】:

    • 连接字符串是根据应用程序运行的上下文自动发现的。由于上下文是网站而不是是,因此您的连接字符串需要在 Web.Config 中定义。您不需要自动发现连接字符串,但如果您执行自定义操作,则需要“执行自定义操作”。 ;-)
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-06
        • 1970-01-01
        • 1970-01-01
        • 2012-10-03
        • 1970-01-01
        • 1970-01-01
        • 2011-12-27
        相关资源
        最近更新 更多