7

So che posso risolvere questo problema spingendo tutto in una singola entità anziché nidificare tipi complessi (poiché sono solo 1-1 mapping), ma mi piace il modo in cui raggruppa proprietà nell'OM generato.EF 4.2, CodeFirst - Proprietà di navigazione all'interno di un tipo complext

Ho un'entità Cliente che contiene un tipo complesso "CrmData". L'entità CrmData ha un tipo di indirizzo complesso.

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; } 
} 

I tipi CountryRegion StateProvince & sono entità nel mio DB (simile a come l'esempio AdventureWorks DB funziona). Il problema è che quando EF tenta di creare il modello, fallisce con:

Il tipo "MyCo.Crm.Entities.StateProvince" è già stato configurato come tipo di entità. Non può essere riconfigurato come un tipo complesso ..

Ho provato a rendere StateProvince un tipo complesso ma che non risolve il problema. Idee?

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

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

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

risposta

14

Tipi complessi cannot contain navigation properties. Le proprietà di navigazione possono essere definite solo nell'entità. Quindi è necessario:

  • Uso table splitting invece di tipi complessi, ma si tradurrebbe in un altro dei problemi - per esempio, non sarà in grado di nido quei tipi e si dovranno utilizzare ansioso/caricamento pigro per caricarli.
  • Spostare tutte le proprietà di navigazione per l'entità principale
+0

Senza failright dopo che ho postato questo ho finalmente trovato un altro thread che menzionato la tua risposta ... per questo caso penso che farò il mio stato e Rurali e stringhe memorizzare i codici come preferirei fare con le ricerche come mi piace il modello che ho. L'unico lato negativo è il pezzo di convalida, ma posso gestirlo in altri modi. –

Problemi correlati