Sự khác biệt giữa JoinQueryOver và JoinAlias ​​là gì?


88

Tôi cần biết sự khác biệt giữa JoinQueryOver và JoinAlias, và khi nào thì sử dụng chúng?

Câu trả lời:


108

Về mặt chức năng, chúng làm điều tương tự, tạo một liên kết đến một thực thể khác. Sự khác biệt duy nhất là những gì họ trở lại. JoinQueryOver trả về một QueryOver mới với thực thể hiện tại là thực thể được tham gia, trong khi JoinAlias ​​trả về QueryOver ban đầu có thực thể hiện tại là thực thể gốc ban đầu.

Việc bạn sử dụng cái nào là vấn đề cá nhân: (từ http://nhibernate.info/doc/nh/en/index.html#queryqueryover )

IQueryOver<Cat,Kitten> catQuery =
    session.QueryOver<Cat>()
        .JoinQueryOver<Kitten>(c => c.Kittens)
            .Where(k => k.Name == "Tiddles");

Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
    session.QueryOver<Cat>(() => catAlias)
        .JoinAlias(() => catAlias.Kittens, () => kittenAlias)
        .Where(() => kittenAlias.Name == "Tiddles");

Có chức năng giống nhau. Lưu ý cách kittenAlias ​​được tham chiếu rõ ràng trong truy vấn thứ hai.


7
Lưu ý rằng trong ví dụ thứ hai bạn phải khai báo các bí danh Kitten kittenAlias = null;Cat catAlias = null;trước đó. Tôi thấy nó lộn xộn, vì vậy tôi không sử dụng JoinAliastrừ khi cần thiết.
foka

Cảm ơn bạn @foka đã làm rõ điều này. Tôi đã bỏ lỡ điều này và tự hỏi tại sao nó không hoạt động.
Mario Tacke vào

12

Loạt bài QueryOver - Phần 2: Khái niệm cơ bản và tham gia của Andrew Whitaker đưa ra lời giải thích rất hay:

Tóm lược:

  • IQueryOverlà một kiểu chung với hai tham số kiểu TRootTSubType
  • .Selecthoạt động trên TRoottrong khi các phương thức QueryOver khác hoạt động TSubType.
  • TRootgiữ nguyên khi bạn đang tạo truy vấn, nhưng TSubTypethay đổi khi bạn tham gia bằngJoinQueryOver
  • JoinQueryOverJoinAliasthêm liên kết vào truy vấn của bạn. JoinAliaskhông thay đổi TSubType, nhưng JoinQueryOvercó.
  • Bạn có thể sử dụng bí danh khi tạo truy vấn để tham chiếu đến các thuộc tính không thuộc về TRoothoặcTSubType
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.