【问题标题】:Entity Framework Conditional Mapping实体框架条件映射
【发布时间】:2011-12-29 19:33:56
【问题描述】:

我有一个旧数据库,其中有一个名为 Address 的表。现在可以为另外两个表分配地址信息。要确定它来自哪个表,有一个 SourceID 字段。如果SourceID为1则与第一个表相关联,如果为2则为第二个表的地址信息。

此旧数据库没有在数据库上定义任何外键约束,因此无法添加。

我想知道我是否使用实体框架来创建一个具有这种关联的模型。其中表 1 可以有一个实体,该实体具有到地址信息的导航(条件是 SourceID =1),与第二个表相同。

我尝试创建一个条件映射并将其设置为“当 SourceID = 1”时,我还从列映射中删除了映射,因为该列只能映射一次。当我尝试编译时,出现以下错误:

错误 3004:从第 683 行开始映射片段时出现问题:没有为 Set Addresses 中的属性 Address.SourceID 指定映射。在以下情况下,具有密钥 (PK) 的实体将不会往返:实体类型为 [Model.Address]

感谢您的帮助!

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    不要使用条件映射。将您的地址映射到没有SourceID 属性的实体,并从地址实体创建两个派生实体。使用 SourceID 作为鉴别器(TPH 继承 - 它与条件映射相同,但您有多个具有不同鉴别器值的实体)。将您的第一个和第二个实体关联到正确的地址子实体。

    【讨论】:

    • 如果我想更进一步怎么办。如果我的表上有第二个条件定义了类型 ID,该怎么办。我尝试从新类型继承,然后添加一个新条件,以便 TypeId = 2。查看 SQL Profiler,这不会在它创建的 SQL 中保留这两个条件。有没有办法拥有多级TPH?
    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2011-03-09
    • 2014-04-01
    • 2011-05-06
    • 2011-08-30
    • 2019-03-27
    相关资源
    最近更新 更多