Вот оригинал пост .
Вот установщик, сгенерированный конструктором LinqToSql.
Фрагмент кода
{
Contact previousValue = this._Contact.Entity;
if (((previousValue != value)
|| (this._Contact.HasLoadedOrAssignedValue == false)))
{
this.SendPropertyChanging();
if ((previousValue != null))
{
this._Contact.Entity = null;
previousValue.ContactEvents.Remove(this);
}
this._Contact.Entity = value;
if ((value != null))
{
value.ContactEvents.Add(this);
this._ContactID = value.ID;
}
else
{
this._ContactID = default(int);
}
this.SendPropertyChanged("Contact");
}
}
Эта строка устанавливает свойство потомка для родителя.
this._Contact.Entity = value;
Эта строка добавляет дочерний элемент в коллекцию родителей.
value.ContactEvents.Add(this);
Установщик для идентификатора не имеет этой второй строки.
Итак, с автоматически сгенерированными сущностями ...
Этот код вызывает неожиданное поведение:
myContactEvent.ContactID = myContact.ID;
Этот код хорош:
myContactEvent.Contact = myContact;
Этот код также хорош:
myContact.ContactEvents.Add(myContactEvent);