什么是具有entity framework的上下文中的复杂类型

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

我知道我必须通过Annotations或Fluent Api映射它们,如下所示:

modelBuilder.ComplexType(); 

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

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

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

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

公司

 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

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

以下复杂类型

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

和实体

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

这将映射到具有“ Name和“ Description字段的表。 这是一种有用的方法,可以在一些实体上封装一组常用的字段/属性。