Использование 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 просто пытается включить все, что он может видеть.
Ваша лучшая ставка - это "новая" проекция, которая выбирает свойства, необходимые для ваших параметров.