我在工作的项目上工作,这几乎是一个调试管理器,我似乎无法弄清楚如何在linq中正确地将Items表链接到sql。
我有一个包详细信息表,其中包含(除其他外)
DepartmentID, CategoryID, ItemID
而Items表(实际上是来自不同数据库的数据库视图,并且只在此应用程序中读取)也有这3个字段,但是当我添加这3个字段的关联时,它不会将其添加为属性对象在PackageDetail类
我正在做这个协会的错误吗?所有单身的我都做得很好......答案 0 :(得分:3)
我不相信Linq-to-SQL可以正确建模与复合密钥的关联:
Is it beneficial to use multicolumn (composite) primary keys when using Linq to SQL?
但是,您仍然可以使用匿名对象作为(单个)密钥在Linq-to-SQL查询中加载具有组合键的对象:
答案 1 :(得分:1)
是否已将这些ID字段标记为主键?确保将必要的列指定为主键,这应该可以正常工作。希望它有所帮助
答案 2 :(得分:0)
确保使用主键和外键关系正确设置键。如果仍然无效,您是否可以考虑添加新的密钥列,而不是依赖于复合密钥?
LINQ to SQL的最后一个选项通常是使用XML编辑器手动更新DBML。正常的单键关系如下所示:
<Association Name="Schedule_Profile" Member="Schedule" ThisKey="ScheduleID" Type="Schedule" IsForeignKey="true" />
建议您尝试自己创建元素,并尝试将ThisKey设置为csv列列表。 OtherKey属性也可能是有意义的。
答案 3 :(得分:0)
看起来你可以只使用ItemId并忽略其他2,因为那是最具体的限定符 - 换句话说,部门和类别完全由itemId决定。
答案 4 :(得分:0)
您的意思是这样的查询。
var result = from table in dbContext.table1 join table2 in dbContext.table2 join new { table.DepartmentID, table.CategoryID, table.ItemID} equals new {table2.DepartmentID, table2.CategoryID, table2.ItemID}
select table;