7

Sé que puedo resolver esto empujando todo en una sola entidad en lugar de anidar tipos complejos (ya que son solo 1-1 mapeos), pero me gusta la forma en que agrupa propiedades en el OM generado.EF 4.2, CodeFirst - Propiedad de navegación dentro de un tipo complext

Tengo una entidad Cliente que contiene un tipo completo "CrmData". La entidad CrmData tiene un tipo de dirección compleja.

public class Customer { 
    [Required] 
    public CrmSpecificData CrmData { get; set; } 
} 
[ComplexType] 
public class CrmSpecificData { 
    [MaxLength(40)] 
    public string FirstName { get; set; } 

    [MaxLength(80)] 
    public string LastName { get; set; } 

    public Address Address { get; set; } 
} 
[ComplexType] 
public class Address { 
    [MaxLength(150)] 
    public string Address1 { get; set; } 

    [MaxLength(150)] 
    public string Address2 { get; set; } 

    [MaxLength(100)] 
    public string City { get; set; } 

    [MaxLength(15)] 
    public string PostalCode { get; set; } 

    public StateProvince StateOrProvince { get; set; } 

    public virtual CountryRegion CountryOrRegion { get; set; } 
} 

Los StateProvince & tipos CountryRegion son entidades en mi DB (similar a cómo funciona el ejemplo AdventureWorks DB). El problema es que cuando EF intenta crear el modelo, falla con:

El tipo 'MyCo.Crm.Entities.StateProvince' ya se ha configurado como un tipo de entidad. No se puede reconfigurar como un tipo complejo.

He intentado hacer del StateProvince un tipo complejo, pero eso no resuelve el problema. Ideas?

public class StateProvince { 
    [Key] 
    public int StateProvinceId { get; set; } 

    [MaxLength(3)] 
    public string StateProvinceCode { get; set; } 

    [MaxLength(50)] 
    public string Name { get; set; } 
} 

Respuesta

14

Los tipos complejos cannot contain navigation properties. Las propiedades de navegación se pueden definir solo en la entidad. Por lo que debe:

  • Uso table splitting en lugar de tipos complejos, sino que daría lugar a otros problemas - por ejemplo, usted no será capaz de nido de esos tipos y que tendrán que utilizar la carga ansiosa/perezoso para cargarlos.
  • Mover todas las propiedades de navegación a la entidad principal
+0

Sin failright después he publicado este fin encontré otro hilo que menciona su respuesta ... para este caso creo que voy a hacer mis cuerdas propiedades de estado y en el país y almacene los códigos ya que prefiero tratar con las búsquedas, ya que me gusta el modelo que tengo. El único inconveniente es la pieza de validación, pero puedo manejar eso de otras maneras. –

Cuestiones relacionadas