我试图附加到我之前分离过的物体上。我的分离操作如下:
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
}
请注意,此类型有两个子项,即组织:管理员和用户。当我加载组织时,我从所有组织中分离出来。
在我的场景中,我正在尝试创建一个新的管理员。以下是我的AdministratorRepository中的代码:
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))。我已经验证了
在我写这篇文章的时候,我想知道它是否真的与某种循环依赖有关 - 管理员有一个主键(即我在调用attach之前设置了ID),数据上下文基本上是通过组织的孩子看到管理员?
如果是这样的话,处理这些父母的最佳方式是什么?> LINQ to SQL中的子关系?
答案 0 :(得分:1)
您是否检查过整个数据上下文是否还包含该特定组织? 我想你应该这样检查一下:
if (!DataContext.Organizations.Contains(administrator.Organization))
{
DataContext.Organizations.Attach(administrator.Organization);
}