我正在尝试使用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) 项目
我一直在查找关于这个主题的所有内容,但没有任何内容可以帮我解答这些问题。我感谢任何帮助。感谢。
答案 0 :(得分:0)
您从EDM获得的错误来自于EF仅在两个实体具有完全相同的主键(因此在数据库上具有一对一关系)时才支持继承的事实,因此您不能在这两个实体之间具有继承根据当前的架构。
但是,我没有看到ItemID和Items实体之间存在一对多关联的问题,我相信这是从数据库更新模型时的默认EF行为。
有关详细信息,请查看此帖子:
Entity Framework, TPT Inheritance