【问题标题】:Catchall Table with Entity Framework带有实体框架的 Catchall 表
【发布时间】:2015-02-13 21:21:04
【问题描述】:

我正在使用 Entity Framework 将一组 JSON 文件中的数据提取到 MS T-SQL 数据库中。

在 JSON 文件中有一堆子集合(到目前为止计数 20 个),它们都遵循模式 "CollectionName":{"Code":"SomeCode","Description":"Some Description"}

例如:"Country":{"Code":"GB","Description":"Great Britain"}"Language":{"Code":"FR","Description":"French"}

我正在使用的代码使用这种模式:创建一个名为 CollectionName 的实体,该实体映射到具有 PK、代码和描述列的表,然后另一个名为 SourceCollection 的实体(例如:PersonLanguage)映射到具有每个的 Source PK 和 CollectionName PK。当你有很多这样的小子集合时,那就是很多表。

作为一名 T-SQL 程序员,我过去曾通过创建一个包含 PK、CollectionName 列和 Code & Description 列的“catchall 表”解决了类似的问题。所以所有这些小集合都驻留在一个表中,在源表中有一个外键指针。

我找不到任何关于如何在实体框架中实现此功能的描述,谁能通过链接或一些示例代码为我指明正确的方向?

【问题讨论】:

    标签: c# sql-server entity-framework catch-all


    【解决方案1】:

    您所描述的模式有时被称为“通用查找表”,出于引用完整性和约束的原因,通常被认为是反模式。

    除了设计决策的优点之外,您有两种选择:

    A) 创建一个具有 Id、CollectionName、Code 和 Description 属性的新 EF 实体,并将现有的类和数据映射到该实体,以便通过某种模式(例如 Repository)进行 CRUD 操作。

    B) 将 EF 类型继承与每个层次结构的表映射一起使用,并允许 EF 将多个实体映射到同一个表。抽象父类型将具有 Id、Code 和 Description 属性。 EF 将自动创建一个鉴别器列,其作用与 CollectionName 相同。

    【讨论】:

    • 谢谢 - 基于此,我决定放弃包罗万象的方法。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2017-06-15
    • 1970-01-01
    • 2011-08-08
    • 2014-03-24
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多