【发布时间】: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