【问题标题】:EF4: Using the same table twiceEF4:两次使用同一张表
【发布时间】:2012-04-24 18:30:00
【问题描述】:

我正在使用 Oracle 数据源,只读取数据,不写入,我不能更改数据库上的任何内容。

想象一下这个有 2 个表的场景,一个课程表和一个备忘录表。

Courses 表有 2 个指向备忘录 (MemoId) 表的链接。

所以...

课程表 课程编号 标题 摘要旁白MemoId 课前信息备忘

MemoToString 表 备忘录 ID 备忘录数据(二进制)

因此,出于不同的原因,课程表两次加入到备忘录表中。

我查看了两次使用同一个表的 EF 继承路由,使用 Memo 表作为基础,并创建 PreCourseMemo 和 SummaryNarrationMemo,但这会在构建时引发这些错误:

我更新了模型以将两个表添加到模型中。

错误 3005:从第 613 行开始映射片段时出现问题:必须为 Set MemoToStringTables 中的所有类型指定映射。 在以下情况下,具有密钥 (PK) 的实体将不会往返: 实体类型为 [MyModel.MemoToStringTable]

错误 3005:从第 613 行开始映射片段时出现问题:必须为 Set MemoToStringTables 中的所有类型指定映射。 在以下情况下,具有密钥 (PK) 的实体将不会往返: 实体类型为 [MyModel.PreCourseMemo]

错误 3005:从第 613 行开始映射片段时出现问题:必须为 Set MemoToStringTables 中的所有类型指定映射。 在以下情况下,具有密钥 (PK) 的实体将不会往返: 实体类型为 [MyModel.SummaryNarrationMemo]

我知道我可以为数据库上的每个视图创建一个视图,但感觉不对。 :( 有什么想法吗?

【问题讨论】:

    标签: c# entity-framework entity-framework-4


    【解决方案1】:

    如果我正确理解您的问题,它将无法正常工作。您正在尝试将继承映射到备忘录表,但要做到这一点,备忘录表必须包含特殊的鉴别器列,它将告诉 EF 它是PreCourseMemo 还是SummaryNarrationMemo。你不能仅仅根据课程的关系来区分这些类型。

    【讨论】:

    • 这只是我尝试过的方法之一,我正在听取有关如何使用此表两次的建议。
    • 你不能。 EF 不允许映射表两次,除非将 TPH 继承与鉴别器列或表拆分有效使用,这将无法解决您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2018-09-03
    • 2020-05-25
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多