7

Я знаю, что могу решить это, нажав все на единую сущность, а не накладывая сложные типы (поскольку они всего лишь 1-1 сопоставлений), но мне нравится, как она группируется свойства в сгенерированном ОМ.EF 4.2, CodeFirst - свойство навигации в пределах типа дополнения

У меня есть объект Customer, который содержит полный тип «CrmData». Объект CrmData имеет сложный тип адреса.

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

Типы CountryRegion StateProvince & являются объекты в моей БД (подобно тому, как работает образец AdventureWorks DB). Проблема в том, что когда EF пытается создать модель, она терпит неудачу с:

Тип «MyCo.Crm.Entities.StateProvince» уже настроен как тип сущности. Он не может быть переконфигурирован как сложный тип.

Я попытался сделать StateProvince сложным, но это не решит проблему. Идеи?

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

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

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

ответ

14

Комплексные типы cannot contain navigation properties. Свойства навигации могут быть определены только в сущности. Таким образом, вы должны либо:

  • Использование table splitting вместо сложных типов, но это привело бы к другим проблемам - например, вы не сможете гнездятся эти типы, и вы должны будете использовать нетерпеливый/отложенной загрузки, чтобы загрузить их.
  • Переместить все свойства навигации к основной сущности
+0

Без failright после того как я отправил это я, наконец, нашел другую нить, что упомянутый ответ ... в этом случае я думаю, что я буду делать свои государственные и страновые свойства строк и сохраните коды, так как я лучше разбираюсь с поисками, поскольку мне нравится модель, которую у меня есть. Единственным недостатком является часть проверки, но я могу справиться с этим другими способами. –

Смежные вопросы