实体框架代码第一个表层次结构

时间:2013-03-26 11:19:58

标签: c# entity-framework code-first

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

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

的泛型类
public class LookUp<T>
{
//where T is one of lookup kind
}

public class MaritalStatus : LookUp
{
 // no field
}

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

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

1 个答案:

答案 0 :(得分: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的每个类型表功能并在查询期间调用.OfType<T>扩展方法。 / p>

检查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类方法,而不使用父类的具体表,这也在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

祝你好运。