После нескольких часов устранения неполадок / проб и ошибок я решил свою проблему.
Мои классы POCO также используются в автономной среде, где
объекты отсоединяются от контекста, модифицируются, а затем снова присоединяются.
Чтобы определить, какие элементы коллекции свойств навигации были затронуты, я переопределил
методы Equals и GetHashCode в классе Address для определения равенства. Очевидно, это влияет на способность EF 4.1 вставлять полную коллекцию объектов свойств навигации ???
Вот оригинальные методы равенства, которые вызвали проблему:
public override bool Equals(object obj)
{
Address address = obj as Address;
if (address == null) return false;
return address.AddressId == this.AddressId;
}
public override int GetHashCode()
{
return this.AddressId.GetHashCode();
}
Чтобы исправить проблему, я создал собственный компаратор равенства
для объекта навигации, а не для включения его непосредственно в класс адресов.
public class AddressEqualityComparer : IEqualityComparer<Address>
{
public bool Equals(Address address1, Address address2)
{
if (address1.AddressId == address2.AddressId)
return true;
else
return false;
}
public int GetHashCode(Address address)
{
return address.AddressId.GetHashCode();
}
}
Мой метод context.People.Add работал, как и ожидалось, после того, как я сделал это изменение.
Если кто-нибудь знает, почему переопределение методов равенства в классе вызывает
EF 4.1, чтобы вставить только первый элемент в коллекции, который будет
отличная информация.