2
我在任務和標記之間建立了一個簡單的多對多關係。一項任務可能有許多標籤,一個標籤可能被分配給許多任務。我使用三個表來管理這個 - 任務,標籤和任務標籤。到現在爲止還挺好。NHibernate多對多條件任務標記示例
我試圖寫下面的示例條件查詢...
Find all tasks that are tagged with 'Apple' (id = 1718) AND 'Orange' (id = 1717)
我發現下面的例子中,我試圖效仿。
NHibernate many-to-many criteria
// Create sample list of tag ids.
var tagIDs = new List<long>();
tagIDs.Add(1718);
tagIDs.Add(1717);
// Create criteria and detached criteria.
var criteria = Session.CreateCriteria<Task>();
var detachedCriteria = DetachedCriteria.For<Task>("t")
.SetProjection(Projections.GroupProperty(Projections.Id()))
.Add(Restrictions.Eq(Projections.Count(Projections.Id()), tagIDs.Count))
.Add(Restrictions.EqProperty("t.ID", "ID"))
.CreateCriteria("Tags")
.Add(Restrictions.In("id", tagIDs.ToArray<long>()));
criteria.Add(Subqueries.Exists(detachedCriteria));
這是它產生的SQL ...
SELECT this_.ID as ID4_0_, [MORE COLS HERE]
FROM dbo.[Task] this_
WHERE exists (
SELECT this_0_.ID as y0_
FROM dbo.[Task] this_0_
inner join dbo.TaskTag tags3_ on this_0_.ID=tags3_.TaskID
inner join dbo.[Tag] tag1_ on tags3_.TagID=tag1_.ID
WHERE this_0_.ID = this_0_.ID
and tag1_.ID in (2, 1718) <------ 1
GROUP BY this_0_.ID
HAVING count(this_0_.ID) = 1717 <------ 2
)
出於某種原因,我不能清楚地瞭解,這些參數都得到錯誤的。
- 注意,它把數(2)在「範圍」列表中不正確,並
- 然後它把第二標籤ID其中計數應該去。
當我修改SQL將參數放在正確的位置,它的工作原理。
我必須有標準不正確,但我看不到它。
我很感激任何幫助。謝謝!
謝謝!我只是看不到問題。使用CreateAlias比CreateCriteria更清晰。 – Kevin