【问题标题】:Problem attaching an entity in LINQ to SQL在 LINQ to SQL 中附加实体的问题
【发布时间】:2009-02-05 17:14:26
【问题描述】:

我正在尝试在 LINQ to SQL 中附加一个实体,但它会引发以下异常L:

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

<Table Name="dbo.Products" Member="Products">
    <Type Name="Product">
      <Column Name="Id" Type="System.Int64" DbType="BigInt NOT NULL IDENTITY" IsReadOnly="true" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
      <Column Name="Name" Type="System.String" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" />    
      <Column Name="IsDeleted" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
      <Column Name="Timestamp" Type="System.Data.Linq.Binary" DbType="timestamp NOT NULL" CanBeNull="false" IsVersion="true" />
      {...SOME ASSOCIATIONS....}
    </Type>
</Table>

我用来附加实体的代码是:

var context = new MyDataContext();
context.Products.Attach(entity, true);

任何想法,为什么我得到这个错误? 谢谢

【问题讨论】:

    标签: .net linq-to-sql


    【解决方案1】:

    您可以将实体附加到与创建它的对象不同的 DataContext 上,前提是它先被序列化和反序列化(比如将其发送到客户端并让它返回)。

    更多信息请见here

    【讨论】:

    • 但我使用的是时间戳成员。
    • 没关系。它必须与原始 DataContext 分离。 Attach() 方法的目的不是在数据上下文之间移动对象。
    【解决方案2】:

    PLINQO 自动在您的实体上实现分离功能以及大量其他功能和增强功能。有兴趣的可以关注http://www.plinqo.com

    【讨论】:

      【解决方案3】:

      我猜您遇到了这个问题,因为您尝试在 n 层环境中使用 LINQ2SQL,可能与 ASP.NET 一起使用,以便在您尝试提交对数据库的更改时不再存在旧上下文?

      我遇到了完全相同的问题,并通过为数据层编写通用存储库实现来解决这些问题。它处理所有实体分离/附加问题,甚至支持更新和删除实体分离树,并且可以帮助您更轻松地编写数据层。你可以找到更详细的描述和源代码here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-22
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多