2009-08-25 43 views
10

Tôi có mối quan hệ cha/con được ánh xạ với bộ nhiều người.Bộ sưu tập tiêu chuẩn NHibernate chứa

public class Parent 
{ 
    public ISet<Child> Children { get; set; } 
} 

public class Child {} 

public class ParentMap : ClassMap<Parent> 
{ 
    HasManyToMany(x => x.Children) 
     .AsSet(); 
} 

Làm cách nào để viết truy vấn để chọn tất cả cha mẹ có con đã cho? Tôi có thể đoán rằng nó sẽ giống như thế này, nhưng API này không tồn tại:

Session.CreateCriteria<Parent>() 
    .Add(Expression.Contains("Children", child) 
    .List<Parent>(); 

Tôi không thể tìm được câu trả lời ở bất cứ đâu. Não của tôi không hoạt động đầy đủ ngày hôm nay và Google đã thất bại cho đến nay.

Trả lời

9

Làm thế nào về một cái gì đó như thế này?

Session.CreateCriteria<Parent>() 
    .CreateCriteria("Children") 
    .Add(Expression.Eq("Id", child.Id) 
    .List<Parent>(); 

hoặc

Session.CreateCriteria<Parent>() 
    .CreateCriteria("Children") 
    .Add(Expression.In("Id", child.Id) 
    .List<Parent>(); 

để bạn có thể vượt qua trong một mảng của Id.

+0

Ya, tôi nghĩ về điều đó, nhưng một cái gì đó về so sánh ID trong NHibernate có vẻ sai. Tôi biết nó thật tuyệt vời, nên vẫn muốn biết nếu có cách nào khác. –

+0

Tại sao sai? Mục đích của Id là xác định duy nhất các đối tượng của bạn trong DB. – RKitson

+1

Vâng đó chỉ là nó, mục đích của ID là để nói * NHibernate * làm thế nào để xác định duy nhất các thực thể của tôi để tôi có thể đối phó với các đối tượng. Nếu trẻ em là một mối quan hệ đơn nhất từ ​​cha mẹ, tôi sẽ nói Expression.Eq ("Trẻ em", con) và sẽ không nói bất cứ điều gì về ID. Tôi biết tôi đang ở đây, tôi chỉ thấy rằng có một cái gì đó tồn tại trong API Tiêu chí cho Chứa và có thể được sử dụng giống như tất cả so sánh thực thể khác được thực hiện. –

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