7

ServiceStack ORMLite là tuyệt vời, tôi thường tránh được tâm lý ORM thích xây dựng cơ sở dữ liệu vì nó có ý nghĩa để xây dựng cơ sở dữ liệu thay vì mô hình lớp 1: 1 . Điều đó nói rằng, có một vài điều mà tôi dường như đang gặp khó khăn xung quanh, tôi chắc chắn nó chỉ đơn giản là sự thiếu hiểu biết của tôi tỏa sáng.ServiceStack MARS (Nhiều bộ kết quả hoạt động) sử dụng ORMLite và tham số đầu ra

Đầu tiên:

Có cách nào để quản lý nhiều bộ kết quả bằng ORMLite không? Tôi biết rằng người ta có thể sử dụng phương thức QueryMultiple sử dụng Dapper, nhưng vì bất kỳ lý do gì tôi đều có một thời gian để tìm ra cách sử dụng việc triển khai thực hiện Dapper có sẵn trong ServiceStack.

Thứ hai:

Có cách nào sử dụng ORMLite để trả lại thông số đầu ra trong cuộc gọi thủ tục được lưu trữ không?

Lý tưởng nhất, tôi muốn để chỉ đạo rõ ràng về MARS và các thông số đầu ra và lý tưởng tôi muốn sống trong một thế giới lý tưởng :)

Tôi đang sử dụng .NET framework 4.5, SQL Server 2008 R2 và ServiceStack 3.9.46.

Trả lời

11

Nó chỉ ra rằng điều này thực sự là khá đơn giản (miễn là bạn biết sự kỳ diệu để làm cho nó xảy ra).

Dựa trên documentation và bài đăng có vẻ gây nhầm lẫn chỉ ra rằng Dapper is "included" in razor Tôi giả định rằng khi nó được ngụ ý rằng Dapper được "tích hợp" mà về cơ bản nó là một phần của các thư viện được bao gồm.

Cười nếu bạn muốn, nhưng đối với những người trong chúng ta chưa chứng ngộ, tôi sẽ phác thảo cách làm cho tiện ích Dapper hiển thị. Đây là phép thuật.

Sử dụng Package Manager console thực hiện như sau:

Install-Package ServiceStack 
Install-Package Dapper 

Thêm những điều khoản sử dụng sau đây (C#) để dịch vụ của bạn:

using ServiceStack.OrmLite; 
using Dapper; 

Bây giờ, khi bạn tận dụng Db phản đối tất cả các OrmLite VÀ phương pháp Dapper sẽ ở đó.

Để có được một tham số đầu ra nó bây giờ cũng đơn giản như:

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

Để quản lý MARS (giả sử bạn có một SP trả về hai bộ kết quả và một param đầu ra):

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

Thật đơn giản, một khi bạn biết sự kỳ diệu :)

Đây là much more complicated example.

Hy vọng điều này sẽ giúp người khác ra ngoài và tiết kiệm cho họ một chút thời gian.

+0

Kết nối db được khởi tạo như thế nào? Tôi không thể tìm thấy một ví dụ bất cứ nơi nào cho điều đó. – craigtadlock

Các vấn đề liên quan