2009-07-29 37 views
0

我有一個文檔類有一個用戶屬性是擁有該文檔的用戶,但我也有一個用戶列表。有權訪問文檔的用戶。我正在嘗試創建一個查詢,它將返回我擁有的或我可以訪問的文檔。如何添加或查詢NHibernate之間的屬性和多對多?

IList<Document> results = UnitOfWork.CurrentSession.CreateCriteria(typeof(Document)) 
       .CreateCriteria("Owner") 
       .CreateCriteria("UserList") 
       .Add(nh.Criterion.Restrictions.IdEq(obj.Id)) 
       .SetFirstResult(pageSize * page) 
       .SetMaxResults(pageSize) 
       .List<Document>(); 

這是我迄今爲止試過的,但無濟於事。 Document類的結構縮寫爲:

public class Document : DomainObject<Document>{ 
    public Document(){ 
      UserList = new List<User>(); 
    } 
    public virtual User Owner{get;set;} 
    public virtual IList<User> UserList{get;set;} 
} 

我很欣賞這個指導!

Cheeers,

安德魯

例如,SQL我找

declare @UserID uniqueidentifier 

set @UserID = '37f7a55f-84c9-461b-a5b2-b412fe96932b' 

select * from [Document] s 
where s.UserID = @UserID 
or exists(select * from DocumentUser su where su.userid = @UserID) 

回答

1

能否請您上傳,將返回你想要的SQL? 。

我在想有一個子查詢在那裏 - 分離的標準可能有助於在這種情況下。然後將其添加到IC條例如:添加(子查詢....)

+0

感謝您的反饋意見。以上將意味着UserList是Owner的一個屬性,但UserList是Document的一個屬性。我也認爲這是一個錯誤。 無法解析屬性:UserList:uk.co.andrewrea.BusinessLogic.Domain.Owner – 2009-07-29 17:01:05

+0

我用一個示例sql更新了它,我正在重新創建 – 2009-07-29 17:35:55

1

我做到了!

感謝您的幫助!您最後發表的評論,並要求我的SQL使我再次清楚地看到:這是解決方案:

var detached = DetachedCriteria.For<Document>() 
     .CreateCriteria("UserList") 
     .SetProjection(Projections.Id()) 
     .Add(Restrictions.IdEq(obj.Id)); 

    IList<Document> results = UnitOfWork.CurrentSession.CreateCriteria(typeof(Document),"s") 
     .CreateAlias("s.User","u") 
     .Add(Restrictions.Or(Restrictions.Eq("u.Id", obj.Id), Subqueries.Exists(detached))) 
     .SetFirstResult(pageSize * page) 
     .SetMaxResults(pageSize) 
     .List<Document>(); 
相關問題