我有两个项目使用遗留数据库,表之间没有关联。在一个中,如果我在DBML文件中创建关联,我可以像这样引用LINQ中的关联:
From c In context.Cities Where c.city_name = "Portland" _
Select c.State.state_name
(假设我在DBML文件中添加了从City.state_abbr
到State.state_abbr
的链接。)
在使用不同数据库的另一个项目中,手动添加关联似乎并没有给我这个功能,我不得不像这样编写LINQ查询:
From c In context.Cities Where c.city_name = "Portland" _
Join s In context.States On c.state_abbr = s.state_abbr _
Select s.state_name
知道我在第二个项目中可能缺少什么吗?
注意:这些都是完全人为的例子 - 真正的源表彼此并不相同,而且非常神秘。
答案 0 :(得分:8)
查看您的Error List页面。你可能会有以下内容:
DBML1062:Type属性 协会的'[ParentTable]' 元素'ParentTable_ChildTable'的 Type元素'ChildTable'没有 有一个主键。没有代码 为协会生成。
在这种情况下,您需要做的就是确保两个表都设置了主键并重新保存dbml文件。这将调用自定义工具,该工具将更新designer.cs文件并为关联创建代码。
答案 1 :(得分:3)
看起来我的问题是我的表在第二个项目中没有主键。就像我说的那样,这些是遗留表,所以我不得不在数据库上下文而不是数据库本身中进行链接和主键操作,而我只是忘了第二次指定主键。当你没有发现它时会感到沮丧,但它现在才有意义。
答案 2 :(得分:1)
有时,当所有内容都配置正确但仍无法正常工作时,解决方案就像重新启动Visual Studio一样简单。
我不知道为什么会发生这种情况,但我想我应该添加这个答案,因为我自己已经做了一些寻找解决方案,似乎没有人建议过这个......