【问题标题】:Dapper.Net and the DataReaderDapper.Net 和 DataReader
【发布时间】:2014-08-30 13:24:26
【问题描述】:

我对 dapper 有一个非常奇怪的错误:

已经有一个打开的 DataReader 与此命令关联 必须先关闭

但我不使用 DataReader!我只是在我的服务器应用程序上调用选择查询并获取第一个结果:

    //How I run query:
    public static T SelectVersion(IDbTransaction transaction = null)
    {
        return DbHelper.DataBase.Connection.Query<T>("SELECT * FROM [VersionLog] WHERE [Version] = (SELECT MAX([Version]) FROM [VersionLog])", null, transaction, commandTimeout: DbHelper.CommandTimeout).FirstOrDefault(); 
    }

    //And how I call this method:
    public Response Upload(CommitRequest message) //It is calling on server from client
    {
            //Prepearing data from CommitRequest

            using (var tr = DbHelper.DataBase.Connection.BeginTransaction(IsolationLevel.Serializable))
            {
                int v = SelectQueries<VersionLog>.SelectVersion(tr) != null ? SelectQueries<VersionLog>.SelectVersion(tr).Version : 0; //Call my query here
                int newVersion = v + 1; //update version

                //Saving changes from CommitRequest to db
                //Updated version saving to base too, maybe it is problem?

                return new Response
                {
                    Message = String.Empty,
                    ServerBaseVersion = versionLog.Version, 
                };
            }
        }
    }

最可悲的是,这个异常出现在随机时间,我认为从两个客户端并发访问服务器有什么问题。

请帮忙。

【问题讨论】:

  • 您是否对该代码段有另一个数据库查询?也许这部分在运行另一个查询的循环中?
  • 你能把整个代码贴出来吗??
  • 不,我没有其他查询,我只是获取版本,更新它并写入基础。我更新了我的第一条消息并编写了更多代码。代码太大,我稍微删减了(注释掉了)

标签: sql .net exception dapper


【解决方案1】:

如果模型和数据库架构不匹配并且在 Dapper 内部引发异常,有时会发生这种情况。

如果你真的想进入这个,最好的方法是在你的项目中包含 dapper 源代码并进行调试。

【讨论】:

    猜你喜欢
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多