Я пытаюсь отобразить объекты, используя Entity Framework "code first", но у меня проблема с отображением сложного типа. Вот мой упрощенный exampled:Сопоставление с каркасом сущности "code first"
объект домена выглядит следующим образом:
public class Customer
{
public Address DeliveryAddress {get; set;}
}
public class Address
{
public string StreetName {get; set;}
public string StreetNumber {get; set;}
public City City {get; set;}
}
public class City
{
public int Id {get; set;}
public string Name {get; set;}
}
и отображение:
public class CustomerConfiguration : EntityConfiguration<Customer>
{
public CustomerConfiguration()
{
this.HasKey(b => b.Id);
this.Property(b => b.Id).IsIdentity();
this.MapSingleType(x => new
{
Id = x.Id,
DeliveryAddress_StreetName = x.DeliveryAddress.StreetName,
DeliveryAddress_StreetNumber = x.DeliveryAddress.StreetNumber,
DeliveryAddress_CityId = x.DeliveryAddress.City.Id, // this line causes an exception
}).ToTable("Customer");
}
}
public class AddressConfiguration : ComplexTypeConfiguration<Address>
{
public AddressConfiguration()
{
this.Property(b => b.StreetName).HasMaxLength(100).IsRequired().IsUnicode();
this.Property(b => b.StreetNumber).HasMaxLength(6).IsRequired().IsUnicode();
}
public class CityConfiguration : EntityConfiguration<City>
{
public CityConfiguration()
{
this.HasKey(b => b.Id);
this.Property(b => b.Id).IsIdentity();
this.Property(b => b.Name).IsRequired().HasMaxLength(200).IsUnicode();
this.MapSingleType(x => new
{
Id = x.Id,
Name = x.Name,
}).ToTable("City");
}
}
Исключение, которое бросают в: «Данный ключ не присутствовал в словаре «.
Может ли кто-нибудь мне помочь?
Спасибо за ответ! Таким образом, в этом случае я должен сделать адрес агрегированным (что не так уж много смысла), или я не должен включать City in Address, но вместо CityId (который может работать для меня, мне не обязательно нужен объект City сам). –
Что-то еще: может ли сложный тип быть дополнительным? Если я присваиваю значение null для адреса и сохраняю его, он выдает исключение, которое не может быть недействительным? –
http://msdn.microsoft.com/en-us/library/bb738472.aspx: Сложные свойства типа не могут быть пустыми. InvalidOperationException возникает при вызове SaveChanges и встречается нулевой сложный объект. Думаю, это отвечает на мой вопрос. Проблема в том, что у меня есть адрес, который является обязательным, а другой адрес является необязательным ... –