企业库5.0,CreateSprocAccessor和超时



是否有办法设置超时CreateSprocAccessor(…)在企业库5.0?

导致默认超时不适用于长存储过程。

第一件事:在连接字符串中添加超时并不能解决问题。

我找到了一个解决方法:你可以修改EL 5.0的源代码并生成一个新的自定义DLL。

  • … EntLib50Src 数据块 Src Data SprocAccessor.cs
  • 执行(…)方法
  • 在return:命令之前添加这段代码。CommandTimeout = 120;//2分钟
  • 编译并使用新的Microsoft.Practices.EnterpriseLibrary.Data.dll,您可以在…EntLib50SrcBlocksbinDebug中找到

实际上,我认为没有必要有你自己的EL副本。为了保持原始EL二进制文件不变,您只需执行以下操作:

  • 继承自procaccessor类
  • 覆盖Execute()方法,在这里放置与procaccessor .Execute()相同的代码,但增加了超时部分
  • 你还需要保留一个局部变量(在你的新类中)procedureName,因为这个变量在SprocAccessor类
  • 中是私有的

像这样:

public class SprocAccessorWithTimeout<T> : SprocAccessor<T>
{
    readonly string procedureName;
    public SprocAccessorWithTimeout(Database database, string procedureName, IRowMapper<T> rowMapper) : base(database, procedureName, rowMapper)
    {
        this.procedureName = procedureName;
    }
      public override IEnumerable<T> Execute(params object[] parameterValues)
      {
            using (var command = Database.GetStoredProcCommand(this. procedureName))
            {
        command.CommandTimeout = MaxSpExecutionTimeout;
                if (parameterValues.Length > 0)
                {
                    Database.AssignParameters(command, parameterValues);
                }
                return base.Execute(command);
            }
        }
    }

相关内容

  • 没有找到相关文章

最新更新