什么是实体框架上下文中的复杂类型
本文关键字:复杂 类型 上下文 实体 框架 什么 | 更新日期: 2023-09-27 18:33:39
现在我正在从 Pluralsight 上的视频中学到很多关于实体框架的知识,所以请原谅我的问题,它可能看起来很新手,但我无法理解复杂类型是什么或为什么我需要它们。
我知道我必须通过注释或Fluent Api来映射它们,如下所示:
modelBuilder.ComplexType<blubb>();
也许有人可以为我详细说明复杂类型的需求?
假设您在类中有一个课程实体,该实体具有位置、日期和时间的标量属性,但您发现您想要抽象化它,以便其他实体可以使用相同的模型。 因此,您可以创建一个包含"日期"、"位置"和"时间"的复杂类型,并为其命名: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
字段的表。这是一种有用的方法,可以让类型封装一组你可能想要的通用字段/属性在多个实体上。