Skip to content

Commit ecef140

Browse files
committed
Added ability specify collection element column name in conventions.
1 parent d492cfd commit ecef140

File tree

11 files changed

+97
-4
lines changed

11 files changed

+97
-4
lines changed

src/FluentNHibernate.Testing/ConventionsTests/ApplyingToModel/HasManyCollectionConventionTests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ public void ShouldSetKeyColumnNameProperty()
105105
VerifyModel(x => x.Key.Columns.First().Name.ShouldEqual("xxx"));
106106
}
107107

108+
[Test]
109+
public void ShouldSetElementColumnNameProperty()
110+
{
111+
Convention(x => x.Element.Column("xxx"));
112+
113+
VerifyModel(x => x.Element.Columns.First().Name.ShouldEqual("xxx"));
114+
}
115+
108116
[Test]
109117
public void ShouldSetElementTypePropertyUsingGeneric()
110118
{

src/FluentNHibernate.Testing/ConventionsTests/ApplyingToModel/HasManyConventionTests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,14 @@ public void ShouldSetKeyColumnNameProperty()
112112
VerifyModel(x => x.Key.Columns.First().Name.ShouldEqual("xxx"));
113113
}
114114

115+
[Test]
116+
public void ShouldSetElementColumnNameProperty()
117+
{
118+
Convention(x => x.Element.Column("xxx"));
119+
120+
VerifyModel(x => x.Element.Columns.First().Name.ShouldEqual("xxx"));
121+
}
122+
115123
[Test]
116124
public void ShouldSetElementTypePropertyUsingGeneric()
117125
{

src/FluentNHibernate.Testing/ConventionsTests/ApplyingToModel/HasManyToManyCollectionConventionTests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ public void ShouldSetParentKeyColumnNameProperty()
105105
VerifyModel(x => x.Key.Columns.First().Name.ShouldEqual("xxx"));
106106
}
107107

108+
[Test]
109+
public void ShouldSetElementColumnNameProperty()
110+
{
111+
Convention(x => x.Element.Column("xxx"));
112+
113+
VerifyModel(x => x.Element.Columns.First().Name.ShouldEqual("xxx"));
114+
}
115+
108116
[Test]
109117
public void ShouldSetElementTypePropertyUsingGeneric()
110118
{

src/FluentNHibernate.Testing/ConventionsTests/ApplyingToModel/HasManyToManyConventionTests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,14 @@ public void ShouldSetParentKeyColumnNameProperty()
104104
VerifyModel(x => x.Key.Columns.First().Name.ShouldEqual("xxx"));
105105
}
106106

107+
[Test]
108+
public void ShouldSetElementColumnNameProperty()
109+
{
110+
Convention(x => x.Element.Column("xxx"));
111+
112+
VerifyModel(x => x.Element.Columns.First().Name.ShouldEqual("xxx"));
113+
}
114+
107115
[Test]
108116
public void ShouldSetElementTypePropertyUsingGeneric()
109117
{

src/FluentNHibernate.Testing/ConventionsTests/OverridingFluentInterface/HasManyCollectionConventionTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,16 @@ public void KeyColumnNameShouldntBeOverwritten()
125125
VerifyModel(x => x.Key.Columns.First().Name.ShouldEqual("name"));
126126
}
127127

128+
[Test]
129+
public void ElementColumnNameShouldntBeOverwritten()
130+
{
131+
Mapping(x => x.Children, x => x.Element("name"));
132+
133+
Convention(x => x.Element.Column("xxx"));
134+
135+
VerifyModel(x => x.Element.Columns.First().Name.ShouldEqual("name"));
136+
}
137+
128138
[Test]
129139
public void ElementTypeShouldntBeOverwrittenUsingGeneric()
130140
{

src/FluentNHibernate.Testing/ConventionsTests/OverridingFluentInterface/HasManyConventionTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,16 @@ public void KeyColumnNameShouldntBeOverwritten()
126126
VerifyModel(x => x.Key.Columns.First().Name.ShouldEqual("name"));
127127
}
128128

129+
[Test]
130+
public void ElementColumnNameShouldntBeOverwritten()
131+
{
132+
Mapping(x => x.Children, x => x.Element("name"));
133+
134+
Convention(x => x.Element.Column("xxx"));
135+
136+
VerifyModel(x => x.Element.Columns.First().Name.ShouldEqual("name"));
137+
}
138+
129139
[Test]
130140
public void ElementTypeShouldntBeOverwrittenUsingGeneric()
131141
{

src/FluentNHibernate.Testing/ConventionsTests/OverridingFluentInterface/HasManyToManyCollectionConventionTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,16 @@ public void ParentKeyColumnNameShouldntBeOverwritten()
127127
VerifyModel(x => x.Key.Columns.First().Name.ShouldEqual("name"));
128128
}
129129

130+
[Test]
131+
public void ElementColumnNameShouldntBeOverwritten()
132+
{
133+
Mapping(x => x.Children, x => x.Element("name"));
134+
135+
Convention(x => x.Element.Column("xxx"));
136+
137+
VerifyModel(x => x.Element.Columns.First().Name.ShouldEqual("name"));
138+
}
139+
130140
[Test]
131141
public void ElementTypeShouldntBeOverwrittenUsingGeneric()
132142
{

src/FluentNHibernate.Testing/ConventionsTests/OverridingFluentInterface/HasManyToManyConventionTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,16 @@ public void ParentKeyColumnNameShouldntBeOverwritten()
126126
VerifyModel(x => x.Key.Columns.First().Name.ShouldEqual("name"));
127127
}
128128

129+
[Test]
130+
public void ElementColumnNameShouldntBeOverwritten()
131+
{
132+
Mapping(x => x.Children, x => x.Element("name"));
133+
134+
Convention(x => x.Element.Column("xxx"));
135+
136+
VerifyModel(x => x.Element.Columns.First().Name.ShouldEqual("name"));
137+
}
138+
129139
[Test]
130140
public void ElementTypeShouldntBeOverwrittenUsingGeneric()
131141
{

src/FluentNHibernate/Conventions/Instances/ElementInstance.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System;
2+
using System.Linq;
3+
24
using FluentNHibernate.Conventions.Inspections;
35
using FluentNHibernate.MappingModel;
46
using FluentNHibernate.MappingModel.Collections;
@@ -15,6 +17,20 @@ public ElementInstance(ElementMapping mapping)
1517
this.mapping = mapping;
1618
}
1719

20+
public void Column(string columnName)
21+
{
22+
if (mapping.Columns.UserDefined.Count() > 0)
23+
return;
24+
25+
var originalColumn = mapping.Columns.FirstOrDefault();
26+
var column = originalColumn == null ? new ColumnMapping() : originalColumn.Clone();
27+
28+
column.Name = columnName;
29+
30+
mapping.ClearColumns();
31+
mapping.AddColumn(column);
32+
}
33+
1834
public new void Type<T>()
1935
{
2036
if (!mapping.IsSpecified("Type"))

src/FluentNHibernate/Conventions/Instances/IElementInstance.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ public interface IElementInstance : IElementInspector
99
new void Type<T>();
1010
new void Type(string type);
1111
new void Type(Type type);
12+
void Column(string name);
1213
}
1314
}

src/FluentNHibernate/MappingModel/Collections/ElementMapping.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq.Expressions;
4-
using System.Reflection;
5-
using FluentNHibernate.Utils;
4+
65
using FluentNHibernate.Visitors;
76

87
namespace FluentNHibernate.MappingModel.Collections
98
{
109
[Serializable]
11-
public class ElementMapping : MappingBase
10+
public class ElementMapping : MappingBase, IHasColumnMappings
1211
{
1312
private readonly IDefaultableList<ColumnMapping> columns = new DefaultableList<ColumnMapping>();
1413
private readonly AttributeStore<ElementMapping> attributes;
@@ -58,7 +57,12 @@ public void AddDefaultColumn(ColumnMapping mapping)
5857
columns.AddDefault(mapping);
5958
}
6059

61-
public IEnumerable<ColumnMapping> Columns
60+
public void ClearColumns()
61+
{
62+
columns.Clear();
63+
}
64+
65+
public IDefaultableEnumerable<ColumnMapping> Columns
6266
{
6367
get { return columns; }
6468
}

0 commit comments

Comments
 (0)