Skip to content

Commit 19612c0

Browse files
committed
Added test with map for NH-3731
1 parent 80789af commit 19612c0

File tree

2 files changed

+60
-25
lines changed

2 files changed

+60
-25
lines changed

src/NHibernate.Test/NHSpecificTest/NH3731/Entity.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,25 @@ class Parent
88
{
99
public Parent()
1010
{
11-
Children = new List<Child>();
11+
ChildrenList = new List<ListChild>();
12+
ChildrenMap = new Dictionary<string, MapChild>();
1213
}
1314

1415
public virtual Guid Id { get; set; }
1516
public virtual string Name { get; set; }
16-
public virtual IList<Child> Children { get; set; }
17+
public virtual IList<ListChild> ChildrenList { get; set; }
18+
public virtual IDictionary<string, MapChild> ChildrenMap { get; set; }
1719
}
1820

1921
[Serializable]
20-
class Child
22+
class ListChild
23+
{
24+
public virtual Guid Id { get; set; }
25+
public virtual string Name { get; set; }
26+
}
27+
28+
[Serializable]
29+
class MapChild
2130
{
2231
public virtual Guid Id { get; set; }
2332
public virtual string Name { get; set; }

src/NHibernate.Test/NHSpecificTest/NH3731/FixtureByCode.cs

Lines changed: 48 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,15 @@ protected override HbmMapping GetMappings()
1717
{
1818
rc.Id(x => x.Id, m => m.Generator(Generators.GuidComb));
1919
rc.Property(x => x.Name);
20-
rc.List(
21-
x => x.Children,
22-
c =>
23-
{
24-
c.Cascade(Mapping.ByCode.Cascade.All | Mapping.ByCode.Cascade.DeleteOrphans);
25-
},
26-
x => x.OneToMany()
27-
);
20+
rc.List(x => x.ChildrenList, c => c.Cascade(Mapping.ByCode.Cascade.All | Mapping.ByCode.Cascade.DeleteOrphans), x => x.OneToMany());
21+
rc.Map(x => x.ChildrenMap, c => c.Cascade(Mapping.ByCode.Cascade.All | Mapping.ByCode.Cascade.DeleteOrphans), x => x.OneToMany());
2822
});
29-
mapper.Class<Child>(rc =>
23+
mapper.Class<ListChild>(rc =>
24+
{
25+
rc.Id(x => x.Id, m => m.Generator(Generators.GuidComb));
26+
rc.Property(x => x.Name);
27+
});
28+
mapper.Class<MapChild>(rc =>
3029
{
3130
rc.Id(x => x.Id, m => m.Generator(Generators.GuidComb));
3231
rc.Property(x => x.Name);
@@ -40,14 +39,13 @@ protected override void OnSetUp()
4039
using (ISession session = OpenSession())
4140
using (ITransaction transaction = session.BeginTransaction())
4241
{
43-
var c1 = new Child { Name = "Child 1" };
44-
var c2 = new Child { Name = "Child 2" };
45-
var c3 = new Child { Name = "Child 3" };
46-
4742
var p = new Parent { Name = "Parent" };
48-
p.Children.Add(c1);
49-
p.Children.Add(c2);
50-
p.Children.Add(c3);
43+
p.ChildrenList.Add(new ListChild { Name = "ListChild 1" });
44+
p.ChildrenList.Add(new ListChild { Name = "ListChild 2" });
45+
p.ChildrenList.Add(new ListChild { Name = "ListChild 3" });
46+
p.ChildrenMap.Add("first", new MapChild { Name = "MapChild 1" });
47+
p.ChildrenMap.Add("second", new MapChild { Name = "MapChild 2" });
48+
p.ChildrenMap.Add("third", new MapChild { Name = "MapChild 3" });
5149

5250
session.Save(p);
5351

@@ -69,16 +67,39 @@ protected override void OnTearDown()
6967
}
7068

7169
[Test]
72-
public void Serializing_Session_After_Reordering_Children_Should_Work()
70+
public void Serializing_Session_After_Reordering_ChildrenList_Should_Work()
71+
{
72+
using (ISession session = OpenSession())
73+
{
74+
using (ITransaction transaction = session.BeginTransaction())
75+
{
76+
var p = session.Query<Parent>().Single();
77+
var c = p.ChildrenList.Last();
78+
p.ChildrenList.Remove(c);
79+
p.ChildrenList.Insert(p.ChildrenList.Count - 1, c);
80+
session.Flush();
81+
transaction.Commit();
82+
}
83+
84+
using (MemoryStream stream = new MemoryStream())
85+
{
86+
BinaryFormatter formatter = new BinaryFormatter();
87+
formatter.Serialize(stream, session);
88+
89+
Assert.AreNotEqual(0, stream.Length);
90+
}
91+
}
92+
}
93+
94+
[Test]
95+
public void Serializing_Session_After_Deleting_First_Child_In_List_Should_Work()
7396
{
7497
using (ISession session = OpenSession())
7598
{
7699
using (ITransaction transaction = session.BeginTransaction())
77100
{
78101
var p = session.Query<Parent>().Single();
79-
var c = p.Children.Last();
80-
p.Children.Remove(c);
81-
p.Children.Insert(p.Children.Count - 1, c);
102+
p.ChildrenList.RemoveAt(0);
82103
session.Flush();
83104
transaction.Commit();
84105
}
@@ -94,14 +115,19 @@ public void Serializing_Session_After_Reordering_Children_Should_Work()
94115
}
95116

96117
[Test]
97-
public void Serializing_Session_After_Deleting_First_Child_Should_Work()
118+
public void Serializing_Session_After_Changing_Key_ChildrenMap_Should_Work()
98119
{
99120
using (ISession session = OpenSession())
100121
{
101122
using (ITransaction transaction = session.BeginTransaction())
102123
{
103124
var p = session.Query<Parent>().Single();
104-
p.Children.RemoveAt(0);
125+
var firstChild = p.ChildrenMap["first"];
126+
var secondChild = p.ChildrenMap["second"];
127+
p.ChildrenMap.Remove("first");
128+
p.ChildrenMap.Remove("second");
129+
p.ChildrenMap.Add("first", secondChild);
130+
p.ChildrenMap.Add("second", firstChild);
105131
session.Flush();
106132
transaction.Commit();
107133
}

0 commit comments

Comments
 (0)