Использование dapper для вставки с хранимой процедурой (возможно, tvp)

У меня есть модель PersonalInfo, например:

public string FirstName { get; set;}
public string LastName { get; set;}
public string Email { get; set; }
public IEnumerable<Addresses> Addresses{ get; set; }

И моя модель адресов включает в себя что-то вроде:

public int AddressId { get; set; }
public string StreedAddress { get; set; }
public string State { get; set; }

Мне нужно использовать хранимую процедуру, чтобы вставить их в базу данных, но мне нужно использовать dapper, чтобы сделать это.. Извините, я новичок.. Я попробовал что-то вроде ниже, и это не сработало:

  var Id =  connection.Execute("usp_Insert", personalInfo, commandType: CommandType.StoredProcedure);
    foreach (Addresses address in personalInfo.Addresses){
        connection.Execute("Insert", new {address, Id}, null, commandType: CommandType.StoredProcedure);
        };

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

ОБНОВИТЬ:

Поэтому я думаю, что если я не хочу передавать адреса в первом, могу ли я исключить это из отправки первым? Я все еще хочу передать всю модель, а не одну опору за раз.

Спасибо

1 ответ

Решение

Проблема в том, что dapper не может сказать - с помощью хранимых процедур - какие параметры нужны. Существуют API-интерфейсы базы данных для запроса, но делать это постоянно очень дорого. Для обычных запросов он может достаточно хорошо понять, что нужно, но для хранимых процедур: они загадки. Следовательно, Dapper просто пытается включить все, что он может видеть.

Ваша лучшая ставка - это "новая" проекция, которая выбирает свойства, необходимые для ваших параметров.

Другие вопросы по тегам