与实体框架的Catchall表

时间:2014-12-15 17:38:27

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

我正在使用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,Code& amp;的表。描述列,然后是另一个名为SourceCollection的实体(例如:PersonLanguage),它映射到具有源PK&的源表。每个的CollectionName PK。如果你有很多这些小的子集合,那就是很多表。

作为一名T-SQL程序员,我过去通过创建一个具有PK,CollectionName列,然后是Code&上面的描述列。所以这些小集合都驻留在一个表中,在源表中有一个外键指针。

我找不到任何关于如何在Entity Framework中实现它的描述,是否有人可以通过链接或一些示例代码指向正确的方向?

1 个答案:

答案 0 :(得分:2)

您描述的模式有时被称为"常见的查找表"并且由于引用完整性和约束,通常被认为是反模式。

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

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

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