Sql server 如何为不匹配的外键建模

Sql server 如何为不匹配的外键建模,sql-server,entity-framework,Sql Server,Entity Framework,我正在尝试使用EF对现有SQL数据库进行建模。DB是多租户的,因为在每个表中都有一个clientID列(我无法更改)。我有如下表结构 表“ItemID”列: ClientID (pk) ItemID (pk) ItemName ClientID (PK) ItemID (PK) [FK to ItemID.ItemID] Version (PK) ItemAttribute1 ItemAttribute2 ItemAttribute3 表“项目”列: ClientID (pk) ItemI

我正在尝试使用EF对现有SQL数据库进行建模。DB是多租户的,因为在每个表中都有一个clientID列(我无法更改)。我有如下表结构

表“ItemID”列:

ClientID (pk)
ItemID (pk)
ItemName
ClientID (PK) 
ItemID (PK) [FK to ItemID.ItemID]
Version (PK)
ItemAttribute1
ItemAttribute2
ItemAttribute3
表“项目”列:

ClientID (pk)
ItemID (pk)
ItemName
ClientID (PK) 
ItemID (PK) [FK to ItemID.ItemID]
Version (PK)
ItemAttribute1
ItemAttribute2
ItemAttribute3
DB设计用于存储“Item”对象的早期版本(行),因此是“Version”列和PK

我是EF的新手,正在尝试在我的项目中采用它。然而,EF似乎不能很好地处理这种情况。我愿意接受所有想法,包括使用存储过程或视图,而不是直接从EF访问表。如何摆脱PKs,转而使用“独立”关系

我遇到的一个具体问题是EF(至少是设计器)要求将一个表中的所有PK映射到任何相关表中的所有PK列。这对我来说没有意义,因为我给出的示例在这种约束下永远不会起作用。我正在尝试使
继承自
项ID
。我得到的错误是:

错误3003:映射中存在问题 从第170行开始的片段:所有 键属性(ItemID.ClientID, EntitySet ItemID的ItemID.ItemID) 必须映射到所有密钥 属性(Items.ClientID, 表的Items.ItemID、Items.Version) 项目


我一直在查找我能找到的关于这个主题的所有信息,但没有任何东西能为我回答这些问题。谢谢你的帮助。谢谢。

您从EDM中得到的错误来自这样一个事实,即EF仅在两个实体具有完全相同的主键时才支持继承(因此数据库上存在一对一关系),因此根据当前模式,您无法在这两个实体之间进行继承。
但是,我认为ItemID和Items实体之间的一对多关联没有问题,我相信这是从数据库更新模型时的默认EF行为。

有关更多信息,请查看此帖子: