Я пытаюсь присоединиться к объекту, от которого я ранее оторвался. Моя операция отсоединения выглядит следующим образом:
partial class Organization : IDetachable
{
#region IDetachable Members
public void Detach()
{
if (IsAttached)
{
PropertyChanged = null;
PropertyChanging = null;
// Detach children -- administrators first.
foreach (var administrator in Administrators)
{
// Detach all of our administrators.
if (administrator.IsAttached)
{
administrator.Detach();
}
}
// now detach users.
foreach (var user in Users)
{
if (user.IsAttached)
{
user.Detach();
}
}
}
}
#endregion
}
Обратите внимание, что у этого типа есть два дочерних элемента: Организация: Администраторы и Пользователи. Когда я загружаю Организацию, я отсоединяюсь от всех них.
В моем сценарии я пытаюсь создать нового администратора. Вот код из моего репозитория Administrator:
public void Save(Administrator administrator)
{
if (!DataContext.Administrators.Contains(administrator))
{
Log.Debug("This is a new administrator.");
administrator.Id = Guid.NewGuid();
administrator.CreatedDate = DateTime.Now;
administrator.Disabled = false;
DataContext.Organizations.Attach(administrator.Organization);
DataContext.Administrators.InsertOnSubmit(administrator);
}
else
{
// Attach to our data context.
DataContext.Administrators.Attach(administrator);
}
DataContext.SubmitChanges();
// Now that we're done...
administrator.Detach();
}
В настоящее время я получаю исключение при попытке присоединиться к организации (DataContext.Organizations.Attach (administrator.Organization)). Я подтвердил, что
- Организация действительна и отделена (то есть ее обработчики событий равны нулю)
- В списке администраторов есть только один Администратор (администратор, которого я сейчас пытаюсь сохранить).
Когда я пишу это, мне интересно, связано ли это с некой круговой зависимостью - у рассматриваемого администратора есть первичный ключ (т. Е. Я устанавливаю идентификатор перед вызовом присоединения), и контекст данных в основном видеться с Администратором через детей Организации?
Если это так, как лучше всего справиться с этими отношениями родитель -> потомок в LINQ to SQL?