很难更新由另一个LINQ to SQL上下文创建的实体

时间:2010-03-08 11:53:00

标签: linq-to-sql

为什么这一整天都在困扰着我。

我有一个带有多个引用的实体,我从一个上下文获取,然后我将Dispose。 做一些更改并尝试SubmitChanges()。虽然没有.Attach()调用SubmitChanges()似乎什么都不做。使用.Attach()时,我得到了例外:

尝试附加或添加非新的实体,可能是从另一个DataContext加载的实体。这不受支持。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

L2S对于更新来自不同数据库上下文的实体非常挑剔。事实上,除非你首先将它从它来自的上下文中分离出来,否则你不能这样做。分离实体有几种不同的方式。其中一个如下所示。此代码将在您的实体类中。

public virtual void Detach()
{
    PropertyChanging = null;
    PropertyChanged = null;
}

除此之外,您还可以使用基于WCF的序列化序列化您的实体。像这样:

    object ICloneable.Clone()
    {
        var serializer = new DataContractSerializer(GetType());
        using (var ms = new System.IO.MemoryStream())
        {
            serializer.WriteObject(ms, this);
            ms.Position = 0;
            return serializer.ReadObject(ms);
        }
    }