1

在我们的数据库中,我们有名为 LookUps 的表(通用,没有名为 lookups 的表)- 1. MaritalStaus(LookUpId, description)。2. TypeOfRelations(LookUpid, description) 3. Title (LookUpid, description)

为这种表定义模型的最佳方法是什么。我在想,如果我创建一个通用类

public class LookUp<T>
{
//where T is one of lookup kind
}

public class MaritalStatus : LookUp
{
 // no field
}

// 标题和关系类型相同。

但我很困惑如何将它们放在一起 1. 我是否必须将所有类型与表等匹配以进行配置?2. Generic lookup 数据库中没有表?欢迎任何好的教程或建议。谢谢, 达尔吉特

4

1 回答 1

1

我想你在混合一些概念。我相信您打算仅使用以下方案中的一个类来访问您的查找表:

var maritalStatus = new Lookup<MaritalStatus>();
var typeOfRelations = new Lookup<TypeOfRelations>();

然后让 EF 弄清楚如何使用泛型Lookup<T>类处理从数据库读取数据和从数据库写入数据的问题。这种方法对于 EF 是不可能的,因为不DbSet<T>存在泛型类型,因为 EF 不会事先知道要从哪些表中读取和写入(T 可以是任何东西)。

解决此问题的一种方法是在 EF 上使用 Table per Type 继承。如果您可以更改数据库架构,那么您可以创建一个父 LookUp 表并让其他 LookUps 都从父级下降,那么您可以使用 EF 的 Table per Type 功能并.OfType<T>在查询期间调用扩展方法。

查看 Morteza Manavi 的文章,了解如何做到这一点: http ://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code- first-ctp5-part-2-table-per-type-tpt.aspx

如果您无法更改数据库架构,那么您可以使用 Table per Concrete class 方法,该方法无需父类的具体表即可通过,在 Morteza Manavi 的文章中也有描述:http: //weblogs.asp.net/manavi /archive/2011/01/03/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines.aspx

祝你好运。

于 2013-03-26T12:49:39.977 回答