首页 新闻 会员 周边

NbearLite调用存储过程的时候,为什么事务隔离级别改了?

0
悬赏园豆:5 [待解决问题]

我写了一个存储过程,里面用了事务,我在数据库中执行该存储过程或者自己用ADO.NET调用该存储过程,事务的隔离级别都是READ COMMITTED,但是用NbearLite调用的话事务级别变为SERIALIZABLE。调用方法如下:
NBearLite.StoredProcedureSection spSection = db.StoredProcedure("spXXXX");
System.Collections.Generic.Dictionary outValues;
spSection.SetReturnParameter("RETURN_VALUE", System.Data.DbType.Int32, 0);
spSection.AddInputParameter("ID", System.Data.DbType.AnsiString, EnterpriseID);
spSection.AddInputParameter("Frist", System.Data.DbType.Currency, Frist);
spSection.AddInputParameter("Second", System.Data.DbType.Currency, Second);
spSection.AddInputParameter("WorkerID", System.Data.DbType.AnsiString, WorkerID);
System.Data.DataSet ds = spSection.ToDataSet(out outValues);
我跟踪代码的执行,没有用事务,郁闷!请问怎么回事??

听说博客园的开发也用了NbearLite,还请各位指点一二

叶开1983的主页 叶开1983 | 初学一级 | 园豆:197
提问于:2014-11-15 15:09
< >
分享
所有回答(1)
0

我们现在主要用Entity Framework与ADO.NET。

建议用ADO.NET改写一下,比如上面的代码可以这样改写:

using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString))
{
    using (var command = conn.CreateCommand())
    {
        command.CommandType = CommandType.StoredProcedure;
        command.CommandText = "spXXXX";
        command.Parameters.AddWithValue("@RETURN_VALUE", 0);
        command.Parameters.AddWithValue("@ID", EnterpriseID);
        command.Parameters.AddWithValue("@Frist", Frist);
        command.Parameters.AddWithValue("@Second", Second);
        command.Parameters.AddWithValue("@WorkerID", WorkerID);
        conn.Open();
        var ds = new DataSet();
        new SqlDataAdapter(command).Fill(ds);         
    }
}
dudu | 园豆:31003 (高人七级) | 2014-11-15 15:20

用ADO.net的话,我试过,的确没有问题。

但是这个问题是线上项目中发现的,如果要改成ADO.net的话,修改代价太大。

现在弄不明白NbearLite是怎么把事务隔离级别给提高成可序列化级的

支持(0) 反对(0) 叶开1983 | 园豆:197 (初学一级) | 2014-11-15 15:29

@叶开1983: 那只能去看NBearLite的源代码了

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2014-11-15 15:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册