EF 4.2, CodeFirst - свойство навигации в полнотекстовом типе - PullRequest
7 голосов
/ 23 декабря 2011

Я знаю, что могу решить эту проблему, помещая все в одну сущность, а не вкладывая сложные типы (поскольку они представляют собой только 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 - это объекты в моей БД (аналогично тому, как работает пример БД 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; }
}

1 Ответ

14 голосов
/ 23 декабря 2011

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

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