7

ServiceLack ORMLite jest świetny, zwykle kierowałem się z dala od mentalności ORM woli budować bazy danych, ponieważ ma sens budowanie baz danych zamiast modelu klasy 1: 1 . To powiedziawszy, jest kilka rzeczy, które wydają mi się borykać z trudnościami, jestem pewien, że to po prostu moja ignorancja prześwituje.ServiceStack MARS (wiele aktywnych zestawów wyników) z wykorzystaniem ORMLite i parametrów wyjściowych

pierwsze:

Czy istnieje sposób zarządzać wiele zestawów wyników przy użyciu ORMLite? Wiem, że można użyć metody QueryMultiple przy użyciu Dappera, ale z jakiegoś powodu nie mam pojęcia, jak wykorzystać wbudowaną implementację Dappera w ServiceStack.

drugie:

Czy istnieje sposób korzystania ORMLite powrotu parametrów wyjściowych w przechowywanej wywołania procedury?

Idealnie chciałbym omijać Mars i parametrów wyjściowych i idealnie chciałbym żyć w idealnym świecie :)

używam NET Framework 4.5, SQL Server 2008 R2 ServiceStack 3.9.46.

Odpowiedz

11

Okazuje się, że jest to naprawdę proste (pod warunkiem, że znasz magię, aby to umożliwić).

Na podstawie documentation i pozornie mylącego postu wskazującego, że Dapper is "included" in razor założyłem, że gdy było założenie, że Dapper był "wbudowany", było ono w istocie częścią dołączonych bibliotek.

Śmiej się, jeśli chcesz, ale dla tych z nas, którzy nie są oświeceni, mam zamiar nakreślić, jak sprawić, by rozszerzenia Dappera się pojawiły. Oto magia.

pomocą konsoli Menedżer pakietów wykonać następujące czynności:

Install-Package ServiceStack 
Install-Package Dapper 

dodać następujący użyciu instrukcji (C#) do serwisu:

using ServiceStack.OrmLite; 
using Dapper; 

Teraz, kiedy wykorzystać DB obiekt cały OrmLite I będą tam dostępne metody Dappera.

Aby uzyskać parametr wyjściowy jest teraz tak proste, jak:

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"); 

w celu zarządzania MARS (Zakładam, że masz SP, która zwraca dwa zestawy wyników i param wyjściu):

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"); 

To jest bardzo proste, gdy poznasz magię :)

Oto much more complicated example.

Mam nadzieję, że pomoże to komuś innemu i zaoszczędzić im trochę czasu.

+0

W jaki sposób inicjalizowane jest połączenie db? Nie mogę znaleźć na to przykładu. – craigtadlock

Powiązane problemy