gpt4 book ai didi

linq-to-sql - 使用 Linq2SQL 删除记录时出错

转载 作者:行者123 更新时间:2023-12-04 16:03:08 26 4
gpt4 key购买 nike

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

错误似乎很简单:

Csla.DataPortalException:DataPortal.Delete 失败(System.InvalidOperationException:Sequence 在 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。不确定这会有所帮助,但不会造成伤害。我不知道你的数据模型,所以我不能像我想的那样理解你的代码。

关于linq-to-sql - 使用 Linq2SQL 删除记录时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2089363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com