通过C#代码传递给存储过程时,TableTypeParameter始终为null

时间:2016-10-24 21:42:41

标签: c# sql-server

我编写了一个Web API方法,使用存储过程从数据库中获取事务历史记录。输入包括从IEnumerable<string> transactionCategories获取输入的表类型参数。

public IEnumerable<ITransactionItem> Get(long loanId, DateTime? fromDate, DateTime? toDate, IEnumerable<string> transactionCategories)
{
    IList<ITransactionItem> items;

    try
    {
        var transCategories = transactionCategories.Select(t => new TransCategoryTableType(t));

        using (var connector = GetConnector(ConnectionNames.UDSConnection))
        {
            items = (IList<ITransactionItem>)connector.StoredProcedure("spname")
                    .Parameter("@LoanId", loanId)
                    .Parameter("@FromDate", fromDate)
                    .Parameter("@ToDate", toDate)
                    .TableValuedParameter("@TransactionCategories", transCategories)
                    .As<ILedgerTransactionItem>()
                    .WithMapper(_mappingStrategy)
                    .GetRows();
        }
    }
    catch (Exception e)
    {
        throw;
    }

    return items;
}

我是这样的数据['Tax','Interest'],但存储过程不接受此输入并始终返回null。我已将TransCategoryTableType定义如下

public sealed class TransCategoryTableType
{
    public TransCategoryTableType(string description)
    {
        Description = description;
    }

    public string Description { get; set; }
}

需要帮助来解决这个问题。 存储过程的初始部分如下所示:

ALTER PROCEDURE [Core].[uspLedgerTransactionHistory]
(
     @LoanId   BIGINT,
     @FromDate DATETIME = NULL,
     @ToDate   DATETIME = NULL,
     @TransactionCategories [Reference].[TransCategories] READONLY
)
AS
BEGIN
    SET NOCOUNT ON;

    BEGIN TRY
        CREATE TABLE #Temp(TransCodeId INT)
        INSERT INTO #Temp
        Select tc.transactioncodeid FROM Reference.tTransactionCodes tc
        JOIN Reference.tTransCodeCategories tcc
        ON tc.TransactionCodeCategoryId=tcc.TransCodeCategoryId
        WHERE tcc.Description IN (SELECT t.Description FROM     @TransactionCategories t)

0 个答案:

没有答案