我正在使用WPF系统,该系统使用Entity Framework挂接到旧的遗留数据库。我们在调试时挂起实时数据的备份,并在空数据库上运行测试。我只在尝试从实时数据的备份中删除时收到以下错误。
此代码:
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'
反过来会产生这个错误:
Msg 208,Level 16,State 1,Procedure TrackDeletedProduct,Line 4。 无效的对象名称'DeletedRecords.dbo.Product_Deleted'。
如果将生成的SQL更改为“select”查询,则返回一行,以便“ReadLicense”返回一个有效的实体。我无法理解为什么这不起作用,特别是当它只针对实时数据时。 “许可”实体是继承自基础“产品”实体的两个实体之一。
干杯。
答案 0 :(得分:5)
从我所看到的情况看,您的表Product
上有一个触发器会在您删除行时触发,并调用该存储过程TrackDeletedProduct
。
该过程将(只是在这里猜测)尝试将产品条目复制到Product_Deleted
数据库中的DeletedRecords
表,但是失败了 - 要么其他数据库或表似乎没有存在。
所以我认为这与ADO.NET实体框架或LINQ到实体无关,但与SQL Server有很多关系 - 检查后端数据库配置!
马克