如果没有两个键作为列

时间:2017-04-06 22:36:46

标签: sql-server entity-framework linq ef-code-first navigation-properties

我不控制现有旧数据库的架构。

一个重要的表格,我们称之为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语句中手动连接它们,这是不可取的。

是否无法在复合键的 一个 列中创建导航属性?

0 个答案:

没有答案