Vì vậy, tôi đã dành vài giờ qua tìm kiếm câu trả lời và dường như tôi không thể tìm thấy bất kỳ điều gì có ý nghĩa.truy vấn nhibernate với sự tham gia phức tạp qua các thực thể không liên quan
public class Game
{
public virtual Guid ID { get; set; }
public virtual ResultStructure Structure { get; set; }
public virtual List<Result> Results { get; set; }
}
public class Result
{
public virtual Player Player { get; set; }
public virtual int Position { get; set; }
}
public class ResultStructure
{
public virtual Guid ID { get; set; }
public virtual List<ResultOutcomes> Outcomes { get; set;}
}
public class ResultOutcomes
{
public virtual int Position { get; set; }
public virtual int Points { get; set; }
}
public class PlayerSummary
{
public virtual Player Player { get; set; }
public virtual int Points { get; set; }
}
Những gì tôi đang cố gắng làm là có được một danh sách các cầu thủ và các điểm họ đã kiếm được qua vô số các trò chơi khác nhau (có nhiều đơn vị trên game
có chứa danh sách các trò chơi). Vì vậy, kết quả cuối cùng của truy vấn sẽ là List<PlayerSummary>
SQL Tôi đang tìm sẽ giống như thế này:
SELECT p.*, Sum(rs.points) FROM result r
JOIN player p on r.playerid = p.id
JOIN game g on r.gameid = g.id
JOIN resultstructure rs on g.resultstructureid = rs.id
JOIN resultoutcomes ro on rs.id = ro.resultstructureid AND ro.position = r.position
Lưu ý, tôi cũng sẽ cần phải làm một số truy vấn/tổng hợp chống lại các đơn vị cấu trúc đó là lý do nó bao gồm. Tôi đang cố gắng làm điều này với NHibernate, sử dụng công cụ TypeSafe, và kế hoạch của tôi là ứng dụng là cơ sở dữ liệu bất khả tri, vì vậy tôi không thể sử dụng SQL trực tiếp (hiện tại nó đang sử dụng Postgres, nhưng tôi có thể chuyển sang SQL server tại một số điểm).
Tôi không đặc biệt muốn sử dụng công cụ "HQL" nơi bạn sử dụng các chuỗi ma thuật đó, vì vậy tôi đang cố gắng sử dụng LINQ hoặc QueryOver/Query.
Có ai có thể chỉ cho tôi đúng hướng không?
Đây là trường hợp ** chính xác ** nơi bạn nên sử dụng HQL. "Chuỗi ma thuật" không có nghĩa là bạn nghĩ nó có nghĩa là gì. –
Tôi muốn loại nội dung an toàn thực sự, tôi hiểu ish HQL, và tôi đánh giá cao rằng nó có thể sẽ làm những gì tôi cần, nhưng tôi muốn giữ tất cả mọi thứ như nhau, và tôi đang sử dụng truy vấn trong hầu hết các phần. – Martin
@DiegoMijelshon Tôi đã thêm giải pháp của mình, có thể giải thích tại sao tôi nên sử dụng HQL qua giải pháp mà tôi đã đưa ra? – Martin