7

Wiem, że mogę rozwiązać ten problem, przesuwając wszystko w jedną całość, zamiast zagnieżdżać typy złożone (ponieważ są to tylko odwzorowania 1-1), ale podoba mi się sposób, w jaki grupuje właściwości w wygenerowanym OM.EF 4.2, CodeFirst - Właściwość nawigacji wewnątrz typu złożonego

Mam jednostkę klienta, która zawiera typ złożony "CrmData". Encja CrmData ma złożony typ adresu.

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

W WojewództwoRegion & rodzaje CountryRegion są podmioty w moim DB (podobny do tego, jak próbka AdventureWorks DB działa). Problem polega na tym, że gdy EF próbuje utworzyć model, kończy się niepowodzeniem z:

Typ "MyCo.Crm.Entities.StateProvince" został już skonfigurowany jako typ jednostki. Nie można go przekonfigurować jako złożonego typu.

Próbowałem uczynić usługę stanową złożonym typem, ale to nie rozwiązuje problemu. Pomysły?

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

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

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

Odpowiedz

14

Typy złożone cannot contain navigation properties. Właściwości nawigacji można definiować tylko w encji. Więc musi:

  • Zastosowanie table splitting zamiast typy złożone, ale to spowoduje kolejne problemy - na przykład nie będzie w stanie zagnieździć te typy i będzie trzeba użyć chętny/leniwy załadunku je załadować.
  • Przenieś wszystkie właściwości nawigacyjnych do głównego podmiotu
+0

Bez failright po Zamieściłem to w końcu znalazłem innego wątku, że wspomniany odpowiedź ... w tym przypadku myślę, że zrobię mój stan i właściwości ciągów i country przechowuj kody, tak jak wolałbym zajmować się odnośnikami, tak jak lubię model, który mam. Jedynym minusem jest element walidacji, ale mogę sobie z tym poradzić w inny sposób. –

Powiązane problemy