我和dapper有一个非常奇怪的错误:
已经有一个与此命令关联的打开DataReader 必须先关闭
但我没有使用DataReader!我只是在我的服务器应用程序上调用select查询并获取第一个结果:
//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,
};
}
}
}
最遗憾的是,这个异常出现在随机时间,我认为从两个客户端并发访问服务器有什么问题。
请帮忙。
答案 0 :(得分:0)
如果模型和数据库模式不匹配并且在Dapper中引发异常,则会发生这种情况。
如果您真的想要了解这一点,最好的方法是在项目中包含dapper源并进行调试。