什么是具有实体框架的上下文中的复杂类型

时间:2014-12-09 15:04:04

标签: c# entity-framework complextype

现在我正在从Pluralsight上的视频中学习很多关于实体框架的内容,所以请原谅我的问题,这可能看起来很新,但我无法理解复杂类型是什么或为什么我需要它们。

我知道我必须通过Annotations或Fluent Api映射它们:

modelBuilder.ComplexType<blubb>();

也许有人可以为我详细说明复杂类型的需求?

3 个答案:

答案 0 :(得分:5)

复杂类型是数据库中重复的结构模式。您必须自定义映射它们,因为无法推断它。

一个例子是两个表都有地址相关的列:

<强>公司

CompanyName
AddressLine1
AddressLine2
Postcode

客户经理

Name
TelephoneNumber
SuperiorName
AddressLine1
AddressLine2
Postcode

这显然不是规范化的数据库设计,但确实会出现这种情况。您可以将地址模型抽象为复杂类型,然后指定Company和AccountManager都具有该复杂类型,而不是为每个具有地址列的表保持映射匹配(尽管在数据库中是单独的)列。

以下是关于复杂类型的深入文章:http://msdn.microsoft.com/en-gb/data/jj680147.aspx

这是一个不太重的,并且显示了在一个模型上映射两个地址的好处,例如:http://visualstudiomagazine.com/articles/2014/04/01/making-complex-types-useful.aspx

答案 1 :(得分:4)

假设您有一个类的课程实体,该实体具有位置,天和时间的标量属性,但您发现要抽象它以便其他实体可以使用相同的模型。因此,您可以创建一个包含Days,Location和Time的复杂类型,为其命名:ComplexType1。现在,只需在模型定义中声明ComplexType1,其他实体就可以使用此类型而不是单个标量属性。

答案 2 :(得分:1)

复杂类型是不映射到类似实体的表的类型,而是映射到一个或多个字段。

以下复杂类型

public class Descriptor
{
     public string Name {get;set;}
     public string Description {get;set;}
}

和实体

public class MyEntity
{
    public Descriptor { get;set;}
}

这会映射到包含NameDescription字段的表格。这是一种有用的方法,可以在一些实体上封装一组常用的字段/属性。