企业库6 ExecuteSprocAccessor重载?

时间:2013-07-13 11:51:07

标签: c# .net-4.0 enterprise-library enterprise-library-6

关于 Microsoft Enterprise Libarary 6 的新版本,他们有一个名为ExecuteSprocAccessor的方法(在执行SP 时应返回Ienumerable<T>)它的所有重载都是:

enter image description here

用法示例:

/*1*/   [Description("Return data as a sequence of objects using a stored procedure")]
/*2*/           static void ReadDataAsObjects()
/*3*/           {
/*4*/               // Create an object array and populate it with the required parameter values
/*5*/               object[] paramArray = new object[] { "%bike%" };
/*6*/               // Create and execute a sproc accessor that uses default parameter and outpu`t mappings
/*7*/               IEnumerable<Product> productData = defaultDB.ExecuteSprocAccessor<Product>("GetProductList", paramArray);
/*8*/               //...
/*9*/               //...
/*10*/           }

其他信息:

参数添加机制(此处)非常有问题,因为没有ParameterName to value关联。

他们所做的就是(第5行)

object[] paramArray = new object[] { "%bike%" };

所以我想如果我有超过1个参数,它将会是:

object[] paramArray = new object[] { "%bike%",19,"lala"... };

这意味着我必须知道sp的param输入顺序的顺序!!!

NB

其他方法确实将这种值附加到名称:

defaultDB.AddInParameter(sprocCmd, "state", DbType.String, "New York");

问题

有没有办法使用ExecuteSprocAccessor并仍然进行ParameterName to value关联? (假设我不知道sp输入参数顺序?

1 个答案:

答案 0 :(得分:1)

在内部使用IParameterMapper这是一个非常简单的界面:

public interface IParameterMapper
{
    /// <summary>
    /// 
    /// </summary>
    /// <param name="command"></param>
    /// <param name="parameterValues"></param>
    void AssignParameters(DbCommand command, object[] parameterValues);
}

这一切都基于位置,所以开箱即用的代码没有多少可以做到的。

一种选择是编写自己的Accessor,它使用知道如何使用参数名称的自定义参数映射器。您可以在帖子Entlib6 DAAB - Using accessors to execute stored procedures with optional parameters?中找到相关示例。