gpt4 book ai didi

c# - 系统.InvalidOperationException : Cannot attach an entity that already exists

转载 作者:行者123 更新时间:2023-11-30 18:09:07 26 4
gpt4 key购买 nike

我正在尝试附加到我之前分离的对象。我的detach操作如下:

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
}

请注意,此类型有两个子项,组织:管理员和用户。当我加载 Organization 时,我会与所有组织分离。

在我的方案中,我正在尝试创建一个新的管理员。这是我的 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))。我已经验证过

  • 组织有效且独立(即它的事件处理程序为空)
  • 管理员列表中只有一位管理员(我当前正在尝试保存的管理员)。

在我写这篇文章时,我想知道它是否真的与某种循环依赖有关——所讨论的管理员有一个主键(即我在调用附加之前设置 ID)并且数据上下文基本上是通过组织的 child 看到管理员?

如果是这样,在 LINQ to SQL 中处理这些父 -> 子关系的最佳方法是什么?

最佳答案

您是否检查过整个数据上下文尚未包含该特定组织?我认为你应该这样检查:

if (!DataContext.Organizations.Contains(administrator.Organization))
{
DataContext.Organizations.Attach(administrator.Organization);
}

关于c# - 系统.InvalidOperationException : Cannot attach an entity that already exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com