C# 带有实体框架的Catchall表

C# 带有实体框架的Catchall表,c#,sql-server,entity-framework,catch-all,C#,Sql Server,Entity Framework,Catch All,我正在使用实体框架将一组JSON文件中的数据提取到MS T-SQL数据库中 JSON文件中有许多子集合(到目前为止计有20个),它们都遵循模式“CollectionName”:{“code”:“SomeCode”,“Description”:“somedescription”} 例如:“国家”:{“代码”:“GB”,“说明”:“大不列颠”}或“语言”:{“代码”:“FR”,“说明”:“法语”} 我正在使用的代码使用这种模式:创建一个名为CollectionName的实体,它映射到一个包含PK、代

我正在使用实体框架将一组JSON文件中的数据提取到MS T-SQL数据库中

JSON文件中有许多子集合(到目前为止计有20个),它们都遵循模式
“CollectionName”:{“code”:“SomeCode”,“Description”:“somedescription”}

例如:
“国家”:{“代码”:“GB”,“说明”:“大不列颠”}
“语言”:{“代码”:“FR”,“说明”:“法语”}

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

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


我找不到关于如何在实体框架中实现这一点的任何描述,有人能用链接或一些示例代码为我指出正确的方向吗?

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

撇开设计决策的优点不谈,您有两个选择:

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


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

谢谢-基于此,我决定放弃catchall方法。非常感谢。