Tôi đã sử dụng dapper.net trong khi bây giờ và một trình ánh xạ ORM rất tốt, nó hoạt động tốt với các kiểu động .Net nhưng tôi nhận thấy rằng khi dapper lấy dữ liệu từ cơ sở dữ liệu, nó trả về kiểu Dapper. là bất kỳ cách nào mà tôi có thể trả lại nó trong bất kỳ loại nào khác như System.Dynamic.ExpandoObject?Các kiểu trả về động Dapper
Trả lời
Đối tượng DapperRow
được thiết kế để chia sẻ nhiều trạng thái giữa các hàng. Ví dụ: nếu bạn tìm nạp 40 hàng, tên cột v.v ... chỉ được lưu trữ sau khi. Nếu chúng tôi sử dụng ExpandoObject
, điều này sẽ cần được định cấu hình cho mỗi hàng. Do đó, việc sử dụng DapperRow
vì chi tiết thực hiện hậu trường là một điều hiệu quả có chủ ý.
Lưu ý rằng đối tượng được trả về từ các API dynamic
cũng có thể được truyền dưới dạng IDictionary<string,object>
.
Tuy nhiên, tôi sẽ mở để hỗ trợ các loại khác hỗ trợ việc sử dụng từ điển này - trong đó ExpandoObject
là một. Vì vậy, có, nó thể được thay đổi sao cho:
var rows = conn.Query<ExpandoObject>(...);
công trình. Đơn giản chỉ cần yêu cầu mã số hỗ trợ và mã đó hiện không tồn tại. Vì vậy, "không, nhưng có lẽ trong một tương lai xây dựng".
Cũng lưu ý rằng bạn không cần phải sử dụng DapperRow
... Tất cả các trường hợp được mong đợi là sử dụng API chung để thực hiện các loại của riêng bạn.
Chắc chắn!
Theo tài liệu đoan trang sử dụng phương pháp truy vấn và nhận dymanics của bạn:
dynamic account = conn.Query<dynamic>(@"
SELECT Name, Address, Country
FROM Account
WHERE Id = @Id", new { Id = Id }).FirstOrDefault();
Console.WriteLine(account.Name);
Console.WriteLine(account.Address);
Console.WriteLine(account.Country);
Như bạn có thể nhìn thấy bạn nhận được một đối tượng năng động và bạn có thể truy cập vào các thuộc tính của nó như là miễn là chúng được xác định rõ trong báo cáo kết quả truy vấn .
Nếu bạn ommit .FirstOrDefault()
bạn nhận được IEnumerable<dynamic>
mà bạn có thể làm bất cứ điều gì bạn muốn với nó.
Tôi gặp vấn đề này và tôi đã giải quyết bằng cách này!
Hàm Query()
trả về tập hợp các động lực bên dưới thực tế là Dapper.SqlMapper.DapperRow
loại đối tượng. Dapper.SqlMapper.DapperRow
là riêng tư. Tôi cần thiết để tự động thêm các thuộc tính cho các đối tượng Dapper.SqlMapper.DapperRow nhưng các đối tượng đó không xuất hiện để làm việc. Kết quả là tôi muốn chuyển đổi Dapper.SqlMapper.DapperRow
thành một ExpandoObject
.
Tôi có thể xây dựng phương thức trợ giúp chung này như dưới đây.
public class DapperHelpers
{
public static dynamic ToExpandoObject(object value)
{
IDictionary<string, object> dapperRowProperties = value as IDictionary<string, object>;
IDictionary<string, object> expando = new ExpandoObject();
foreach (KeyValuePair<string, object> property in dapperRowProperties)
expando.Add(property.Key, property.Value);
return expando as ExpandoObject;
}
}
Sau đó, bạn có thể sử dụng như thế này:
IEnumerable<ExpandoObject> result =
db.SqlConn.Query(sqlScript)
.Select(x=> (ExpandoObject)ToExpandoObject(x));
tham khảo: dapper-dot-net issues 166
- 1. kiểu trả về động của một hàm
- 2. Kiểu trả về kiểu hàm
- 3. Java Generics và các kiểu trả về
- 4. On kiểu trả về Void
- 5. DataContract và năng động kiểu trả về WCF
- 6. Loại trả về động Java?
- 7. Mẫu lưu trữ và kiểu trả về
- 8. Mongoose findByIdAndUpdate không trả về đúng kiểu
- 9. khối try-catch với kiểu trả về
- 10. PostgreSQL: cách trả về kiểu hỗn hợp
- 11. Làm cho mysql_fetch_assoc tự động phát hiện các kiểu dữ liệu trả về?
- 12. Nhiều kiểu trả về php 7
- 13. Trả về kiểu sai trong C++
- 14. Cách tìm kiểu trả về trong VBA
- 15. Sử dụng Dapper QueryAsync để trả về một đối tượng đơn
- 16. dapper -ulti-mapping: phẳng sql trả về đối tượng lồng nhau
- 17. Kết quả Dapper (Dapper Row) với Bracket Notation
- 18. Có thể Dapper giá trị trả về từ một hàm SQL?
- 19. Kiểu kiểu nội tuyến hoặc kiểu css này có trả về bằng jquery .css()
- 20. Trả về cuộc gọi đệ quy Danh sách, kiểu trả về gây ra cho tôi các vấn đề
- 21. Java Generics cast dựa trên kiểu trả về?
- 22. Kotlin - khi biểu thức có kiểu trả về của hàm
- 23. C++ 14: suy ra (tự động) các kiểu trả về từ constexpr với các biểu thức bậc ba
- 24. Kiểu kết quả chuỗi trả về từ Struts2
- 25. đặt lớp hiện tại làm chú thích kiểu trả về
- 26. Backbone collection.create() không trả về kiểu cập nhật
- 27. Kiểu trả về của View :: make in Laravel là gì?
- 28. Kiểu kiểu cú pháp kiểu trả về có trở thành mặc định cho các chương trình C++ 11 mới không?
- 29. Phương thức SQLCommand ExecuteScalar() trả về kiểu dữ liệu nào?
- 30. Trang trợ giúp được tạo tự động với kiểu trả về HttpResponseMessage
tại sao chúng ta phải chuyển đổi hàng đoan trang để expando đối tượng một cách rõ ràng, nó là convertable qua phương pháp sau đây phải không? var rows = conn.Query (...); –
Có thể trong phiên bản kế tiếp của Dapper hoạt động đúng nhưng trong phiên bản 1.4 mà tôi đã sử dụng, đó là đối tượng được chuyển đổi không có bất kỳ thuộc tính nào. Tôi tìm thấy giải pháp này từ các vấn đề cụ thể. – Behzad