在LINQ to SQL中附加实体的问题

问题描述 投票:2回答:3

我试图在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
3个回答
2
投票

您可以将实体附加到与创建它的实体不同的DataContext,只有先将其序列化并反序列化(比如将其发送给客户端并让它返回)。

有关更多信息,请参阅here


1
投票

PLINQO自动在您的实体上实现Detach功能以及大量其他功能和增强功能。如果您有兴趣,请查看http://www.plinqo.com


1
投票

我想你遇到了这个问题,因为你试图在一个n层环境中使用LINQ2SQL,可能还有ASP.NET,这样当你试图提交对数据库的更改时,旧的上下文就不再存在了?

我有完全相同的问题,并通过为数据层编写通用的Repository实现来解决它们。它负责所有实体分离/附加问题,甚至支持更新和删除实体分离树,并可能帮助您更轻松地编写数据层。您可以找到更详细的描述和源代码here

© www.soinside.com 2019 - 2024. All rights reserved.