2012-05-09 39 views
5

Tôi có một số trường hợp để báo cáo nơi thực thi sprocs dễ dàng hơn và đơn giản hơn các câu lệnh QueryOver phức tạp.NHibernate - Thực thi SQL để điền DTO

Tôi có DTO, không phải là thực thể đại diện cho dữ liệu được trả về từ truy vấn và muốn điền kết quả của truy vấn vào DTO. Tôi đang sử dụng truy vấn được đặt tên và session.GetNamedQuery() để thực hiện truy vấn.

  1. Tôi có phải tạo tệp ánh xạ cho DTO không?
  2. Nếu vậy, có thể cho NHibernate/FluentNHibernate biết rằng không nên tạo bảng cho DTO không? Các bài kiểm tra đơn vị của tôi thả và tạo lược đồ bằng cách sử dụng công cụ SchemaExport của NH và không muốn tạo các bảng cho các DTO's

Xin lưu ý rằng tôi không muốn đưa ra truy vấn QueryOver/LINq bằng Projections và AliasToBean - tôi cần để thực hiện thủ tục được lưu trữ.

Cheers

Trả lời

9

Với CreateSQLQuery, phần sau sẽ hoạt động mà không có bất kỳ tệp ánh xạ nào. Có lẽ bạn có thể cung cấp cho nó một thử với truy vấn tên:

public class YourDto 
{ 
    public int YourDtoId { get; set; } 
    public string YourDtoTitle { get; set; } 
} 

sau đó

var result = yourNhSession 
    .CreateSQLQuery("select yourColumn1 as YourDtoId, yourColumn2 as YourDtoTitle from YOUR_TABLE") 
    .SetResultTransformer(Transformers.AliasToBean<YourDto>()) 
    .List<YourDto>(); 
+0

Điều này làm việc tuyệt vời, nhưng không hoạt động cho các truy vấn được đặt tên như nh xác minh các lớp được sử dụng trong các truy vấn được đặt tên khi xây dựng cấu hình lúc khởi động và cần biết về DTO. Sẽ sửa đổi mã để sử dụng nếu không có ai khác có giải pháp. cảm ơn – Chev

2

Nếu bạn muốn các giải pháp đơn giản nhất tôi khuyên bạn nên thêm vào trong kiến ​​trúc của bạn một micro/orm như Dapper để làm điều này. Nó chỉ là thả một single file trong dự án của bạn và làm theo mẫu. Để tôi nó là giải pháp tốt nhất để ghép nối với NH khi bạn phải làm các thingh đó là vì lý do nào đó trong logic thực thể.

+0

+1 cho đoan trang. có vẻ khá thú vị. – Chev

+0

@Chev nó là, là một đồng hành NH tốt, và vì nó loại bỏ rất nhiều đường ống dẫn nước NH có, nó là sáng nhanh. –

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