当不使用SqlParameterCollection时,SqlParameter已经包含在另一个SqlParameter

本文关键字:SqlParameter 另一个 包含 SqlParameterCollection | 更新日期: 2023-09-27 18:19:22

我有以下抛出的 SqlParameter已经包含在catch块中的另一个SqlParameterCollection异常。

我发现奇怪的是,我们没有创建一个SqlParameterCollection。每次我们创建一个新的实例,所以SqlParameter永远不会被使用超过一次。另一个奇怪的地方是,test包含来自存储过程的正确结果,并将结果返回给调用方法,但是当我从3行再走一次到4行时,它决定进入catch块。不是在33行,我希望它发生…如果有帮助的话,我们使用CodeFirst生成工具从ObjectContext切换到DbContext。所有其他数据库交互和使用的存储过程都按预期工作。

1    try
2    {
3        tempMessages = Context.CheckExistingTables(importSession.ImportSessionID).ToList();
4    }
5    catch (Exception e)
6    {
7        this.LogError("Error validating the import file entities", e);
8        tempMessages.Add(new ErrorMessage() { ErrorType = 3, Message = string.Format("Error validating the import file entities: {0}", e.Message) });
9    }
...
20    public IEnumerable<ErrorMessage> CheckExistingTables(Guid? importSessionID)
21    {
22        SqlParameter importSessionIDParameter;
23
24        if (importSessionID.HasValue)
25        {
26            importSessionIDParameter = new SqlParameter("importSessionID", importSessionID);
27        }
28        else
29        {
30            importSessionIDParameter = new SqlParameter("importSessionID", typeof(System.Guid));
31        }
32
33        var test = Database.SqlQuery<ErrorMessage>("Import.CheckExistingTables @importSessionID", importSessionIDParameter);
34        return test;
35    }

当不使用SqlParameterCollection时,SqlParameter已经包含在另一个SqlParameter

所以答案是在33行末尾调用.ToList()

给别人的提示…将using语句using System.Linq;添加到文件的顶部,否则您将没有ToList()选项。