2016-11-18 3 views
1

Я помогаю кому-то в интеграции, связанной с dapper, и в настоящее время существует сценарий, в котором у нас есть некоторые данные, которые нам нужно получить в хранимой процедуре. Таким образом, мы можем написать хранимую процедуру, однако мы хотим, и можно записать щеголеватый немного, однако мы хотим, но объект будет выглядеть примерно так:Передайте массив сложных объектов хранимой процедуре с dapper

public class SomeComplexObject 
{ 
    public string Something {get; set;} 
    public string SomethingElse {get;set;} 
} 

Это будет в массиве с где-то от 1-N количеств эти объекты. Поэтому нам нужно передать их в хранимую процедуру, чтобы она использовалась как часть внутренних запросов.

Так что, если бы я сделать что-то вроде:

new SqlParameter("arrayOfGoodies", arrayOfComplexObjects); 

Однако это дает нам сообщение об ошибке:

No mapping exists from object type

Это имеет смысл, поскольку, как бы это знать, как преобразовать этот массив Pocos в что-то для мира SQL, но каким-то образом мне нужно получить эти данные в хранимой процедуре. Итак, есть ли способ сделать это, либо рассказывая о таком типе, либо, возможно, используя один из параметров параметра табличного значения или что-то в этом роде?

ответ

0

Вы можете передать массив в качестве параметра, оцененного по таблице. К сожалению, вам придется сначала преобразовать его в DataTable.

Например:

conn.Execute("My_SP", new { values = myTable.AsTableValuedParameter("MyType") }, 
commandType: CommandType.StoredProcedure); 

Некоторые другие примеры here

Смежные вопросы