У меня возникли проблемы с получением значения Identity после вставки строки с типом столбца varbinary (max). Вот код, который я использую (в соответствии с PetaPoco Page):PetaPoco Varbinary (max) и IdentityColumn
using (var uow = UnitOfWorkFactory.Create())
{
var result = uow.Db.Execute(@"INSERT INTO LOG_EXPORT (DateTime, FileName, FileSize, FormatID, Lines, Login, UPO, XMLFile)
VALUES (@0, @1, @2, @3, @4, @5, @6, @7)", logExport.DateTime, logExport.FileName, logExport.FileSize, logExport.FormatID, logExport.Lines, logExport.LogExportId, new SqlParameter() { SqlDbType = SqlDbType.VarBinary, Value = DBNull.Value }, new SqlParameter() { SqlDbType = SqlDbType.VarBinary, Value = DBNull.Value });
uow.Commit();
return result;
}
возвращает количество возвращаемых строк. Я хотел бы иметь тот же результат, когда я использую:
var result = uow.Db.Insert(logExport);
uow.Commit();
return result;
Я также пытался использовать:
var result = uow.Db.ExecuteScalar<int>("SELECT SCOPE_IDENTITY()");
uow.Commit();
return result;
Но я получил сообщение об ошибке. Я не хочу использовать «SELECT max()». Какое лучшее решение для этого?
Спасибо, Набу
Используйте 'дизъюнкцию OUTPUT', когда вы делаете ваш' INSERT', чтобы выбрать то, что вы хотите. См. Http://msdn.microsoft.com/en-us/library/ms177564.aspx – Zer0
Спасибо за ответ! К сожалению, ни PetaPoco Db.Execute, ни Db.Query могут работать с предложением OUTPUT ... –
Kamil