7

ServiceStack ORMLite замечательный, я, как правило, избегал менталитета ORM, предпочитающего создавать базы данных, поскольку имеет смысл создавать базы данных вместо модели класса 1: 1 , Тем не менее, есть несколько вещей, с которыми я, кажется, сталкиваюсь с трудностями, я уверен, что это просто мое невежество.ServiceStack MARS (несколько активных наборов результатов) с использованием ORMLite и выходных параметров

Первое:

Есть ли способ управлять несколько наборов результатов с помощью ORMLite? Я знаю, что с помощью Dapper можно использовать метод QueryMultiple, но по какой-то причине у меня есть медведь времени, выясняя, как использовать встроенную Dapper-реализацию ServiceStack.

Второе:

Есть ли способ использования ORMLite для возврата выходных параметров в вызове хранимой процедуры?

В идеале я хотел бы держаться подальше от MARS и выходных параметров, а в идеале я хотел бы жить в идеальном мире :)

Я использую рамки .NET 4.5, SQL Server 2008 R2 и ServiceStack 3.9.46.

ответ

11

Оказывается, что это действительно очень просто (если вы знаете, волшебство, чтобы это произошло).

На основании documentation и, казалось бы, вводящего в заблуждение почтового отправления, указывающего на то, что Dapper is "included" in razor Я предполагал, что когда подразумевалось, что Даппер был «встроен», он по существу являлся частью включенных библиотек.

Смех, если хотите, но для тех из нас, кто не просветлен, я расскажу, как сделать расширения Dapper. Итак, вот волшебство.

Использование консоли Package Manager выполните следующие действия:

Install-Package ServiceStack 
Install-Package Dapper 

Добавьте следующие используя операторы (C#) для вашей службы:

using ServiceStack.OrmLite; 
using Dapper; 

Теперь, когда вы рычаги Db объекта все OrmLite И методы Dapper будут там.

Чтобы получить выходной параметр это теперь так же просто, как:

var p = new DynamicParameters(); 

p.Add("@param1", request.stuff1); 
p.Add("@param2", request.stuff2); 
p.Add("@param3", dbType: DbType.Int32, direction: ParameterDirection.Output); 

Db.Execute("schema.sp_stored_proc_name", p, commandType: CommandType.StoredProcedure); 

response.outputStuff = p.Get<int>("@param3"); 

Для того, чтобы управлять MARS (предположим, что у вас есть SP, который возвращает два набора результатов, и выход из параметров):

p.Add("@param1", request.stuff1); 
p.Add("@param2", request.stuff2); 
p.Add("@param3", dbType: DbType.Int32, direction: ParameterDirection.Output); 

var mars = Db.QueryMultiple("schema.sp_stored_proc_name", p, commandType: CommandType.StoredProcedure); 

//firstSet contains the first result set 
var firstSet = mars.Read().ToList(); 
//secondSet contains the second result set 
var secondSet = mars.Read().ToList(); 

response.outputStuff = p.Get<int>("param3"); 

Это прекрасно, когда вы знаете волшебство :)

Вот much more complicated example.

Надеюсь, это поможет кому-то еще, и сохраняет их немного времени.

+0

Как инициализируется соединение db? Я не могу найти для этого пример. – craigtadlock