如何为不匹配的外键建模

时间:2010-10-12 12:20:40

标签: sql-server entity-framework

我正在尝试使用EF来建模现有的SQL数据库。通过在每个表中都有一个clientID列,DB是多租户(我不能更改它)。我有如下表结构。

表'ItemID'列:

ClientID (pk)
ItemID (pk)
ItemName

表'项'列:

ClientID (PK) 
ItemID (PK) [FK to ItemID.ItemID]
Version (PK)
ItemAttribute1
ItemAttribute2
ItemAttribute3

数据库旨在存储'Item'对象的先前版本(行),因此存储'Version'列和PK。

我是EF的新手,并试图将其用于我的项目。但是,EF似乎无法很好地处理这种情况。我对所有想法持开放态度,包括使用存储过程或视图而不是直接从EF访问表。那么摆脱PK并使用“独立”关系呢?

我遇到的一个具体问题是EF(至少是设计者)要求将一个表中的所有PK映射到任何相关表中的所有PK列。这对我来说没有意义,因为我给出的例子在给定约束的情况下永远不会工作。我试图让Items继承自ItemID。我得到的错误是:

  

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

我一直在查找关于这个主题的所有内容,但没有任何内容可以帮我解答这些问题。我感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

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

有关详细信息,请查看此帖子: Entity Framework, TPT Inheritance