Вопрос: EF 4.2, CodeFirst - свойство навигации в классе дополнения


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

У меня есть объект 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; }
}

Типы StateProvince & CountryRegion являются объектами в моей базе данных (подобно тому, как работает DB DB AdventureWorks). Проблема в том, что когда 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; }
}

7


источник


Ответы:


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

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

14