我不控制现有旧数据库的架构。
一个重要的表格,我们称之为LookupTable
,形状如下:
TABLE dbo.LookupTable (
LookupId int NOT NULL,
LanguageId int NOT NULL,
PRIMARY KEY (LookupId, LanguageId),
LookupName varchar(15)
)
另一个,我们称之为ActualData
,有我正在消耗的数据行:
TABLE dbo.ActualData(
ActualDataId int NOT NULL IDENTITY PRIMARY KEY,
SomeDataIConsume whatever,
ActualDataNameLookupId int
)
此数据库中没有外键,但ActualData.ActualDataNameLookupId
列包含LookupTable.LookupId
值。
我希望有一个ActualData
实体框架POCO,它上面有一个导航属性,它为我提供了相应的LookupTable
实体框架POCO。
实际上,LanguageId
始终为1
,在使用该表中的值编写SQL查询时,我们始终加入AND LanguageId=1
。理想情况下,这将是一个多对一的关系,LanguageId = 1将成为其中的一部分。
如果有必要,我甚至会接受多对多关系,具有复数ICollection<LookupTable> ActualDataNames
属性而不是LookupTable ActualDataName
属性。但似乎我甚至不能这样做:
从我所看到的情况来看,如果您在表上有复合主键,并且想要获取导航属性,则必须 包含列 将 所有 键映射到。我尝试了几种不同的方法来编写它,并会出现像
这样的错误a中从属角色和主要角色中的属性数量 关系约束必须相同。
或
指定的列数必须与主键的数量匹配 列。
或
表达式应代表属性。
我现在唯一的办法就是在每个使用它们的LINQ语句中手动连接它们,这是不可取的。
是否无法在复合键的 一个 列中创建导航属性?