Tôi đang sử dụng NHibernate với truy vấn SQL để điền một số đối tượng thực thể.NHibernate - AddEntity và AddJoin
tôi có một đối tượng mục mà tham chiếu đến một đối tượng tài khoản (để chỉ chủ sở hữu của Item)
class Item
{
public User User;
}
truy vấn SQL của tôi là (nó thực sự phức tạp hơn, đó là lý do tôi không thể sử dụng HQL, nhưng tôi bắt đầu với điều này để đảm bảo AddJoin/AddEntity đang làm việc):
SELECT {i.*}, {u.*}
FROM Item i INNER JOIN User u ON (i.UserId = u.Id)
WHere i.Id = 5
đây là mã của tôi:
var x = session.CreateSQLQuery(sql)
.AddEntity("i", typeof(Item))
.AddJoin("u", "i.User")
.List();
Khi tôi chạy điều này, tôi nhận được một mảng hai chiều. Mỗi mục trong mảng chứa một đối tượng Item (với thuộc tính User được khởi tạo) và chính đối tượng User.
Tôi đang thiếu gì? Tôi đã hy vọng sẽ nhận được một danh sách các đối tượng Item với thuộc tính User được khởi tạo (đó là cách tôi giải thích tài liệu).
Cảm ơn Ben. Tôi đã thêm điều này - .SetResultTransformer (mới DistinctRootEntityResultTransformer()) - nhưng sau đó tôi nhận được một danh sách Người dùng, thay vì danh sách các Mục mong muốn. Tôi nghĩ Root Entity sẽ là Item, nên cái gì đó khác là sai. –
Điều này không hoạt động khi có một addjoin khác. Bạn cần phải cuộn DistinctRootEntityResultTransformer của riêng bạn. Xem bên dưới. – Trent