Отправка и получение данных с помощью Dapper - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть модель внутри другой модели, например:

Первая модель:

public class ReminderPushNotificationTest
{
    public string UserName { get; set; }
    ....
    public ReminderPushNotificationTableType AndroidResultTableType { get; set; }
}

Вторая модель:

public class ReminderPushNotificationTableType
{
    public string Headers { get; set; }
    ...
}

В SQL Я создаю таблицу Значение параметра и получить его в качестве параметра в моей хранимой процедуре как:

 @AndroidResultTableType [HELPER].[PushNotificationTestTableType] READONLY

Я использую Dapper для отправки результата в виде:

public async Task<bool> ReminderPushNotificationInsert_Test(ReminderPushNotificationTest model)
{
    try
    {
        async Task<bool> DoReminderPushNotificationInsert_Test()
        {
            using var connection = _connectionManager.GetOpenConnection(_configuration.GetConnectionString(ConnectionString));

            await connection.QueryAsync("[Test].[usp_spName]", param: new {
                model.UserId,
                model.AndroidResultTableType
            }
            , commandType: CommandType.StoredProcedure);

            return true;
        }
        return await DoReminderPushNotificationInsert_Test();
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

Но выдается исключение:

Элемент AndroidResultTableType типа Models.Helpers.Test.ReminderPushNotificationTableType нельзя использовать в качестве значения параметра

Как передать AndroidResultTableType в качестве данных, если он не является списком. У него всегда есть 1 ряд.

1 Ответ

2 голосов
/ 01 апреля 2020

Вместо передачи прямого объекта вам нужно создать DataTable и заполнить его поля

    await connection.QueryAsync("[Test].[usp_spName]", new
    {
        model.UserId,
        AndroidResultTableType = CreateTableType(model.AndroidResultTableType)
    }, commandType: CommandType.StoredProcedure);

    private static DataTable CreateTableType(ReminderPushNotificationTableType notification)
    {
        var t = new DataTable();
        t.SetTypeName("[HELPER].[PushNotificationTestTableType]");
        t.Columns.Add("Headers");
        t.Rows.Add(notification.Headers);
        return t;
    }
...