使用 Linq2SQL 删除记录时出错

2024-03-21

我最近收到了客户的错误报告,但没有解决它。我希望有人能给我一些可能出错的见解。

这个错误看起来很简单:

Csla.DataPortalException:DataPortal.Delete 失败(System.InvalidOperationException:序列在 System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 源)处包含多个元素

这是我的 DataPortal_Delete 方法,它采用 FileId (PK) 作为参数。

private void DataPortal_Delete(SingleCriteria<File, Guid> criteria)
    {
        using (var ctx = ContextManager<Ronin.Data.RoninDataContext>
                    .GetManager(Database.ApplicationConnection, false))
        {
            var data = ctx.DataContext.Files
                    .Single(row => row.FileId == criteria.Value);

            ctx.DataContext.FileSources.DeleteAllOnSubmit(data.FileSources);

            ctx.DataContext.Files.DeleteOnSubmit(data);

            ctx.DataContext.SubmitChanges();
        }
    }

我检查的第一件事是查看是否有另一个具有相同 FileId 的记录(虽然是主键,但这应该是不可能的)。所有 FileId 实际上都是唯一的。我启动了连接到客户端数据库的应用程序,并尝试删除该记录,它工作正常,没有任何问题。客户端的 IT 人员使用“问题步骤记录器”向我发送用户所采取操作的逐步屏幕截图。没有什么异常,当他使用不同的机器时,他能够毫无错误地删除记录。显然,只有当应用程序在 Windows 7 中运行时才会发生这种情况。

也就是说,有什么想法可能导致这种情况吗?


假设对 Single 的调用是问题的根源,而不是:

ctx.DataContext.Files.Single(...)

更改代码以允许从该查询返回多行,然后在返回多行时记录它返回的内容。这应该会指出您的“重复”数据问题。

另一件需要注意的事情是在幕后生成的 SQL。不确定这会有所帮助,但不会造成伤害。我不知道你的数据模型,所以我无法像我想的那样理解你的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Linq2SQL 删除记录时出错 的相关文章

随机推荐