【问题标题】:inheritance between edmx filesedmx 文件之间的继承
【发布时间】:2012-04-13 12:15:20
【问题描述】:

我有 5 个不同的 edmx 文件,每个文件包含许多表(大约 40 个)。
现在我要为位于那些不同 edmxs 上的一些表添加相同类型的引用属性。例如,假设在 edmx1 我有 Worker 实体,在 edmx2 我有客户实体,在 edmx3 我有供应商实体等等。现在我想添加对 Worker、Customer 和 Supplier 的 Location 实体的引用。我可以将 Location 表添加到每个 edmx 并进行代码复制。但就我而言,我有许多共同的实体,而不仅仅是位置。实际上,我更喜欢将所有公共实体分离到不同的 edmx,并对具有引用公共实体的实体的其他 edmx 执行类似“继承”之类的操作。这样的事情可能吗?如果是这样 - 如何?如果不是 - 这种情况的常见解决方案是什么?

【问题讨论】:

    标签: .net entity-framework edmx


    【解决方案1】:

    没有。如果您使用的是 EDMX 文件,则每个文件都是自包含的。

    在使用 EDMX 时,EF 中的类型重用有 very limited support。首先,设计师不支持它。它也仅在 CSDL 中受支持。因此,这意味着您可以拥有多个 CSDL 部分(实体定义),其中一个 CSDL 文档可以与另一个 CSDL 文档中的实体建立关系(但这种关系只能是单向的),但您只能拥有一个 SSDL(数据库定义)和 MSL(映射定义)文档。

    目前,您的每个 EDMX 文件都代表单独的 CSDL、MSL 和 SSDL 文档,因此无法轻松转换为该场景。

    这是代码映射的好场景(无 EDMX)。

    【讨论】:

    • 所有 edmx 都使用同一个数据库。另外,我只需要单向关系(例如,位置不应该知道客户)。为了找到如何使用 CSDL 实现这一点,需要搜索什么?代码映射(没有 EDMX)是什么意思?
    • 该链接提供了如何使用它的方法(它只是使用一个巨大的 EDMX 文件更复杂的方法)。代码映射 = 代码优先。
    • 谢谢!这种方法是否允许将每个 edmx 放在单独的项目中?
    • 没有。 EDMX 由三部分组成——CSDL、MSL、SSDL。此方法要求您不使用 EDMX,而是直接使用这些部分 - 您将为每个“EDMX”拥有单独的 CSDL,但只有单个 MSL 和 SSDL 从所有 EDMX 连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多