什么是具有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
字段的表。 这是一种有用的方法,可以在一些实体上封装一组常用的字段/属性。