Я использую EF4 CTP5. Вот мой POCO которые:EF4 - Может ли POCO использоваться как Entity, так и ComplexType?
public class Address
{
public int Id { get; set; }
public string Name { get; set; }
public string Line1 { get; set; }
public string Line2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
}
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public List<Address> Addresses { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
public int Id { get; set; }
public decimal Total { get; set; }
public Address ShippingAddress { get; set; }
public Address BillingAddress { get; set; }
}
Есть ли способ, чтобы получить адрес, чтобы быть ComplexType для класса Order? Поиграв с этим, я предполагаю, что нет, но, возможно, есть способ, которого я не видел.
EDIT: В ответ на Shawn ниже, я дал ему мой лучший выстрел:
//modelBuilder.Entity<Order>().Ignore(o => o.BillingAddress);
//modelBuilder.Entity<Order>().Ignore(o => o.ShippingAddress);
modelBuilder.Entity<Order>()
.Property(o => o.BillingAddress.City).HasColumnName("BillingCity");
терпит неудачу во время выполнения с ошибкой «Настроенный свойство„BillingAddress“не объявлен собственностью на предприятие 'Порядок'." Попытка использовать Ignore()
не работает. Далее, статья Hanselman является CTP4, но эквивалент CTP5 является:
modelBuilder.Entity<Order>().Map(mapconfig =>
{
mapconfig.Properties(o => new {
o.Id
, o.Total
, o.BillingAddress.City
});
mapconfig.ToTable("Orders");
});
с ошибкой «Свойство„BillingAddress.City“типа„Order“не может быть включен в его отображении.»
Я сдаюсь. Возможно, в финальном выпуске будет что-то вроде этого. Или, может быть, мне нужно переключиться на NHibernate =)
Если я объявляю modelBuilder.ComplexType
() ;, что произойдет с моим списком ? – anonНачиная с вашей текущей настройки, он будет проигнорирован, но если вы попытаетесь установить на нем ассоциацию (либо с помощью свободного API, либо даже добавив свойство навигации, например Customer, в класс Address), тогда EF будет бросать и напоминать вам, что Address является сложным типом и не может участвовать в ассоциациях FK. –
Я пробовал некоторые предложения Шона и добавил их на свой пост. Дайте мне знать, если вы можете думать о каких-либо других «хаках». (Кстати, у меня есть открытый вопрос здесь, и я хотел бы услышать ваш вклад: http://stackoverflow.com/questions/4703378/ef4-independent-associations-why-avoid-them) – anon