2014-09-03 2 views
0

У меня возникли проблемы с получением значения 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()». Какое лучшее решение для этого?

Спасибо, Набу

+1

Используйте 'дизъюнкцию OUTPUT', когда вы делаете ваш' INSERT', чтобы выбрать то, что вы хотите. См. Http://msdn.microsoft.com/en-us/library/ms177564.aspx – Zer0

+0

Спасибо за ответ! К сожалению, ни PetaPoco Db.Execute, ни Db.Query могут работать с предложением OUTPUT ... – Kamil

ответ

1

уверен, что количество строк, возвращаемых не идентификатор последней вставленной записи Вы?

Вы можете изменить вставить заявление включить OUTPUT Inserted.Id следующим образом:

var result = db.ExecuteScalar<int>(@"INSERT INTO ... UPO, XMLFile) OUTPUT Inserted.Id VALUES (@0 ... 
+0

Да! Работает отлично! Я попытался использовать OUTPUT с переменной @Table. Именно поэтому PetaPoco работает неправильно. – Kamil

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