Pregunta Qué son los tipos complejos en contexto con Entity Framework


En este momento estoy aprendiendo mucho sobre Entity Framework de Videos en Pluralsight, así que disculpe mi pregunta, que podría parecer novedosa, pero no puedo entender qué son los tipos complejos o por qué los necesitaría.

Sé que tengo que asignarlos a través de Annotations o Fluent Api algo como esto:

modelBuilder.ComplexType<blubb>();

¿Tal vez alguien podría elaborar la necesidad de Tipos complejos para mí?


5
2017-12-09 15:04


origen


Respuestas:


Suponga que tiene una entidad para Cursos en una clase, esa entidad tiene propiedades escalares de Ubicación, Días y Hora, pero encuentra que desea abstraer eso para que otras entidades puedan usar el mismo modelo. Para que pueda crear un tipo complejo que contenga Días, Ubicación y Tiempo, asígnele un nombre: ComplexType1. Ahora, otras entidades pueden usar este tipo en lugar de propiedades escalares individuales simplemente declarando ComplexType1 en la definición del modelo.


4
2017-12-09 15:10



Los tipos complejos están repitiendo patrones estructurales en su base de datos. Tienes que mapearlos a medida porque no hay forma de inferirlo.

Un ejemplo serían dos tablas que tienen columnas relacionadas con la dirección:

Empresa

CompanyName
AddressLine1
AddressLine2
Postcode

Gerente de cuentas

Name
TelephoneNumber
SuperiorName
AddressLine1
AddressLine2
Postcode

Obviamente, esto no es un diseño de base de datos bien normalizado, pero tales situaciones ocurren. Puede abstraer el modelo de la dirección en un tipo complejo, luego especificar que tanto la Compañía como AccountManager tienen ese tipo complejo en lugar de seguir mapeando las columnas de concordancia (aunque separadas en la base de datos) para cada tabla que tenga columnas de dirección.

Aquí hay un artículo en profundidad sobre tipos complejos: http://msdn.microsoft.com/en-gb/data/jj680147.aspx

Y aquí hay uno que no es tan pesado, y muestra el beneficio de mapear dos direcciones en un modelo, cosas así: http://visualstudiomagazine.com/articles/2014/04/01/making-complex-types-useful.aspx


5
2017-12-09 15:11



Los tipos complejos son tipos que no se asignan a una tabla como entidades, sino que se asignan a uno o más campos.

El siguiente tipo complejo

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

Y entidad

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

Esto se asignaría a una tabla con Name y Description campos. Es una forma útil de hacer que un tipo encapsule un conjunto común de campos / propiedades que pueda desear en varias entidades.


1
2017-12-09 15:11