我要经历的步骤......
添加新的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#中将上下文称为“我用来访问我的实体的对象”。所以,这里我很难想象。我是否需要始终为上下文选择连接字符串?
答案 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)
您的模型中的财产必须声明为公开。重建并重试,它应该工作