【问题标题】:Linq to Entities / Entity Framework delete exceptionLinq to Entities / Entity Framework 删除异常
【发布时间】:2009-08-17 04:55:46
【问题描述】:

我正在开发一个 WPF 系统,该系统使用实体框架连接到旧的遗留数据库。我们在调试时连接到实时数据的备份和一个空数据库来运行测试。只有在尝试从实时数据的备份中删除时,我才会收到以下错误。

这段代码:

License license = ReadLicense(id);
entities.DeleteObject(license);
entities.SaveChanges();

产生这个 SQL:

exec sp_executesql N'delete [dbo].[Product]
where ((([Group_ID] = @0) and ([Parent_ID] = @1)) and ([Prod_ID] = @2))',N'@0 nvarchar(32),@1 nvarchar(32),@2 nvarchar(32)',@0=N'someIdValue1',@1=N'someIdValue2',@2=N'someIdValue3'

这又会产生此错误:

消息 208,级别 16,状态 1,过程 TrackDeletedProduct,第 4 行。 无效的对象名称“DeletedRecords.dbo.Product_Deleted”。

如果您将生成的 SQL 更改为“选择”查询,它会返回一行,因此,“ReadLicense”将返回一个有效实体。我真的不明白为什么这不起作用,尤其是当它只针对实时数据时。 “许可证”实体是从基本“产品”实体继承的两个实体之一。

干杯。

【问题讨论】:

    标签: c# sql-server entity-framework exception linq-to-entities


    【解决方案1】:

    据我所知,您的表 Product 上似乎有一个触发器,当您删除一行时将触发该触发器,并调用该存储过程 TrackDeletedProduct

    该过程将(只是在这里猜测)尝试将产品条目复制到 DeletedRecords 数据库中的 Product_Deleted 表,但失败了 - 其他数据库或表似乎不存在。

    所以我认为这与 ADO.NET Entity Framework 或 LINQ-to-Entities 没有任何关系,但与 SQL Server 有很大关系 - 检查您的后端数据库配置!

    马克

    【讨论】:

    • 非常感谢你,没想到表触发器。仅供参考,数据库的空版本是从备份创建脚本的缩减版本创建的,自从向我的同事展示你的解决方案后,我发现了这一点。所以触发器根本不在那里。 Rekon我应该编辑标签?可能会帮助其他人更多...
    • 很高兴我能提供帮助 - 我会保留标签原样 - 没问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2020-06-06
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多