Skip to content

Commit 3f8fa2a

Browse files
committed
test case
1 parent f5e2431 commit 3f8fa2a

File tree

3 files changed

+130
-0
lines changed

3 files changed

+130
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace NHibernate.Test.NHSpecificTest.GH1994
5+
{
6+
public class Base
7+
{
8+
public virtual Guid Key { get; set; }
9+
10+
public virtual bool IsDeleted { get; set; }
11+
}
12+
13+
public class Asset : Base
14+
{
15+
public virtual ISet<Document> Documents { get; set; } = new HashSet<Document>();
16+
}
17+
18+
public class Document : Base
19+
{
20+
public virtual ISet<Asset> Assets { get; set; } = new HashSet<Asset>();
21+
}
22+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
using System.Linq;
2+
using NHibernate.Linq;
3+
using NUnit.Framework;
4+
5+
namespace NHibernate.Test.NHSpecificTest.GH1994
6+
{
7+
[TestFixture]
8+
public class Fixture : BugTestCase
9+
{
10+
protected override void OnSetUp()
11+
{
12+
using (var session = OpenSession())
13+
using (var transaction = session.BeginTransaction())
14+
{
15+
var a = new Asset();
16+
var d = new Document { IsDeleted = true };
17+
a.Documents.Add(d);
18+
19+
session.Save(a);
20+
transaction.Commit();
21+
}
22+
}
23+
24+
protected override void OnTearDown()
25+
{
26+
using (var session = OpenSession())
27+
using (var transaction = session.BeginTransaction())
28+
{
29+
// The HQL delete does all the job inside the database without loading the entities, but it does
30+
// not handle delete order for avoiding violating constraints if any. Use
31+
// session.Delete("from System.Object");
32+
// instead if in need of having NHbernate ordering the deletes, but this will cause
33+
// loading the entities in the session.
34+
35+
session.Delete("from System.Object");
36+
37+
transaction.Commit();
38+
}
39+
}
40+
41+
[Test]
42+
public void YourTestName()
43+
{
44+
using (var s = OpenSession())
45+
{
46+
var assetsUnfiltered = s.Query<Asset>()
47+
.FetchMany(x => x.Documents)
48+
.ToList();
49+
50+
s.EnableFilter("deletedFilter").SetParameter("deletedParam", false);
51+
52+
s.Clear();
53+
var assetsFilteredQuery = s.Query<Asset>()
54+
.FetchMany(x => x.Documents)
55+
.ToList();
56+
57+
s.Clear();
58+
var assetsFilteredQueryOver = s.QueryOver<Asset>()
59+
.Fetch(SelectMode.Fetch, x => x.Documents)
60+
.List<Asset>();
61+
62+
Assert.That(assetsUnfiltered.Count, Is.EqualTo(1), "unfiltered assets");
63+
Assert.That(assetsUnfiltered[0].Documents.Count, Is.EqualTo(1), "unfiltered asset documents");
64+
65+
Assert.That(assetsFilteredQueryOver.Count, Is.EqualTo(1), " query over filtered assets");
66+
Assert.That(assetsFilteredQueryOver[0].Documents.Count, Is.EqualTo(0), "query over filtered asset documents");
67+
68+
Assert.That(assetsFilteredQuery.Count, Is.EqualTo(1), "query filtered assets");
69+
Assert.That(assetsFilteredQuery[0].Documents.Count, Is.EqualTo(0), "query filtered asset documents");
70+
}
71+
}
72+
}
73+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test"
3+
namespace="NHibernate.Test.NHSpecificTest.GH1994">
4+
5+
<class name="Base" abstract="true" dynamic-update="true" lazy="true">
6+
<id name="Key" column="pdoid" generator="guid.comb"/>
7+
8+
<property name="IsDeleted" column="IsDeleted" />
9+
10+
<filter name="deletedFilter" condition="IsDeleted = :deletedParam"/>
11+
12+
</class>
13+
14+
<union-subclass name="Asset" table="Asset" lazy="true" extends="Base">
15+
<set name="Documents" table="asset_to_document" lazy="true" cascade="all-delete-orphan">
16+
<key column="AssetId"/>
17+
<many-to-many class="Document" column="DocumentId">
18+
<filter name="deletedFilter" condition="IsDeleted = :deletedParam"/>
19+
</many-to-many>
20+
</set>
21+
</union-subclass>
22+
23+
<union-subclass name="Document" table="Document" lazy="true" extends="Base">
24+
25+
<set name="Assets" table="asset_to_document" lazy="true" cascade="all-delete-orphan">
26+
<key column="DocumentId"/>
27+
<many-to-many class="Asset" column="AssetId"/>
28+
</set>
29+
</union-subclass>
30+
31+
<filter-def name="deletedFilter">
32+
<filter-param name="deletedParam" type="bool"/>
33+
</filter-def>
34+
35+
</hibernate-mapping>

0 commit comments

Comments
 (0)