我试图在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);
任何想法,为什么我得到这个错误?谢谢
您可以将实体附加到与创建它的实体不同的DataContext,只有先将其序列化并反序列化(比如将其发送给客户端并让它返回)。
有关更多信息,请参阅here
PLINQO自动在您的实体上实现Detach功能以及大量其他功能和增强功能。如果您有兴趣,请查看http://www.plinqo.com
我想你遇到了这个问题,因为你试图在一个n层环境中使用LINQ2SQL,可能还有ASP.NET,这样当你试图提交对数据库的更改时,旧的上下文就不再存在了?
我有完全相同的问题,并通过为数据层编写通用的Repository实现来解决它们。它负责所有实体分离/附加问题,甚至支持更新和删除实体分离树,并可能帮助您更轻松地编写数据层。您可以找到更详细的描述和源代码here。