|
From: <fab...@us...> - 2011-04-08 14:13:27
|
Revision: 5641
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5641&view=rev
Author: fabiomaulo
Date: 2011-04-08 14:13:21 +0000 (Fri, 08 Apr 2011)
Log Message:
-----------
Fix NH-2633
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/FakeModelExplicitDeclarationsHolder.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IModelExplicitDeclarationsHolder.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ComponentCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ExplicitDeclarationsHolder.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelExplicitDeclarationsHolderExtensions.cs
trunk/nhibernate/src/NHibernate.Test/MappingByCode/ModelExplicitDeclarationsHolderMergeTest.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ClassWithComponentsTest.cs
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-08 05:48:54 UTC (rev 5640)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-08 14:13:21 UTC (rev 5641)
@@ -19,9 +19,9 @@
private readonly HashSet<MemberInfo> naturalIds = new HashSet<MemberInfo>();
private readonly HashSet<MemberInfo> oneToManyRelations = new HashSet<MemberInfo>();
private readonly HashSet<MemberInfo> oneToOneRelations = new HashSet<MemberInfo>();
- private readonly HashSet<MemberInfo> persistentProperties = new HashSet<MemberInfo>();
private readonly HashSet<MemberInfo> poids = new HashSet<MemberInfo>();
private readonly HashSet<MemberInfo> properties = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> persistentMembers = new HashSet<MemberInfo>();
private readonly HashSet<System.Type> rootEntities = new HashSet<System.Type>();
private readonly HashSet<MemberInfo> sets = new HashSet<MemberInfo>();
private readonly HashSet<System.Type> tablePerClassEntities = new HashSet<System.Type>();
@@ -135,6 +135,11 @@
get { return properties; }
}
+ public IEnumerable<MemberInfo> PersistentMembers
+ {
+ get { return persistentMembers; }
+ }
+
public IEnumerable<SplitDefinition> SplitDefinitions
{
get { return splitDefinitions; }
@@ -284,94 +289,99 @@
public void AddAsOneToOneRelation(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
oneToOneRelations.Add(member);
}
public void AddAsManyToOneRelation(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
manyToOneRelations.Add(member);
}
public void AddAsManyToManyRelation(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
manyToManyRelations.Add(member);
}
public void AddAsOneToManyRelation(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
oneToManyRelations.Add(member);
}
public void AddAsAny(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
any.Add(member);
}
public void AddAsPoid(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
poids.Add(member);
}
public void AddAsVersionProperty(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
versionProperties.Add(member);
}
public void AddAsNaturalId(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
naturalIds.Add(member);
}
public void AddAsSet(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
sets.Add(member);
}
public void AddAsBag(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
bags.Add(member);
}
public void AddAsIdBag(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
idBags.Add(member);
}
public void AddAsList(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
lists.Add(member);
}
public void AddAsArray(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
arrays.Add(member);
}
public void AddAsMap(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
dictionaries.Add(member);
}
public void AddAsProperty(MemberInfo member)
{
- persistentProperties.Add(member);
+ persistentMembers.Add(member);
properties.Add(member);
}
+ public void AddAsPersistentMember(MemberInfo member)
+ {
+ persistentMembers.Add(member);
+ }
+
public void AddAsPropertySplit(System.Type propertyContainer, string splitGroupId, MemberInfo member)
{
/* Note: if the user "jump/exclude" a class and then map the property in two subclasses the usage of GetMemberFromDeclaringType() may cause a problem
@@ -484,7 +494,7 @@
public bool IsPersistentProperty(MemberInfo member)
{
- return persistentProperties.Contains(member);
+ return persistentMembers.Contains(member);
}
public bool IsSet(MemberInfo role)
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/FakeModelExplicitDeclarationsHolder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/FakeModelExplicitDeclarationsHolder.cs 2011-04-08 05:48:54 UTC (rev 5640)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/FakeModelExplicitDeclarationsHolder.cs 2011-04-08 14:13:21 UTC (rev 5641)
@@ -21,6 +21,7 @@
private readonly IEnumerable<MemberInfo> oneToOneRelations = Enumerable.Empty<MemberInfo>();
private readonly IEnumerable<MemberInfo> poids = Enumerable.Empty<MemberInfo>();
private readonly IEnumerable<MemberInfo> properties = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> persistentMembers = new HashSet<MemberInfo>();
private readonly IEnumerable<System.Type> rootEntities = Enumerable.Empty<System.Type>();
private readonly IEnumerable<MemberInfo> sets = Enumerable.Empty<MemberInfo>();
private readonly IEnumerable<System.Type> tablePerClassEntities = Enumerable.Empty<System.Type>();
@@ -137,6 +138,11 @@
get { return properties; }
}
+ public IEnumerable<MemberInfo> PersistentMembers
+ {
+ get { return persistentMembers; }
+ }
+
public IEnumerable<SplitDefinition> SplitDefinitions
{
get { return splitDefinitions; }
@@ -193,6 +199,8 @@
public void AddAsMap(MemberInfo member) {}
public void AddAsProperty(MemberInfo member) {}
+ public void AddAsPersistentMember(MemberInfo member){}
+
public void AddAsPropertySplit(System.Type propertyContainer, string splitGroupId, MemberInfo member) {}
#endregion
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IModelExplicitDeclarationsHolder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IModelExplicitDeclarationsHolder.cs 2011-04-08 05:48:54 UTC (rev 5640)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IModelExplicitDeclarationsHolder.cs 2011-04-08 14:13:21 UTC (rev 5641)
@@ -42,6 +42,7 @@
IEnumerable<MemberInfo> Arrays { get; }
IEnumerable<MemberInfo> Dictionaries { get; }
IEnumerable<MemberInfo> Properties { get; }
+ IEnumerable<MemberInfo> PersistentMembers { get; }
IEnumerable<SplitDefinition> SplitDefinitions { get; }
IEnumerable<string> GetSplitGroupsFor(System.Type type);
@@ -70,6 +71,7 @@
void AddAsArray(MemberInfo member);
void AddAsMap(MemberInfo member);
void AddAsProperty(MemberInfo member);
+ void AddAsPersistentMember(MemberInfo member);
void AddAsPropertySplit(System.Type propertyContainer, string splitGroupId, MemberInfo member);
}
}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ComponentCustomizer.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ComponentCustomizer.cs 2011-04-08 05:48:54 UTC (rev 5640)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ComponentCustomizer.cs 2011-04-08 14:13:21 UTC (rev 5641)
@@ -25,6 +25,10 @@
throw new ArgumentNullException("explicitDeclarationsHolder");
}
explicitDeclarationsHolder.AddAsComponent(typeof (TComponent));
+ if(propertyPath != null)
+ {
+ explicitDeclarationsHolder.AddAsPersistentMember(propertyPath.LocalMember);
+ }
}
#region Implementation of IComponentMapper<TComponent>
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ExplicitDeclarationsHolder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ExplicitDeclarationsHolder.cs 2011-04-08 05:48:54 UTC (rev 5640)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ExplicitDeclarationsHolder.cs 2011-04-08 14:13:21 UTC (rev 5641)
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
@@ -20,6 +21,7 @@
private readonly HashSet<MemberInfo> oneToOneRelations = new HashSet<MemberInfo>();
private readonly HashSet<MemberInfo> poids = new HashSet<MemberInfo>();
private readonly HashSet<MemberInfo> properties = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> persistentMembers = new HashSet<MemberInfo>();
private readonly HashSet<System.Type> rootEntities = new HashSet<System.Type>();
private readonly HashSet<MemberInfo> sets = new HashSet<MemberInfo>();
private readonly HashSet<SplitDefinition> splitDefinitions = new HashSet<SplitDefinition>();
@@ -130,6 +132,11 @@
get { return properties; }
}
+ public IEnumerable<MemberInfo> PersistentMembers
+ {
+ get { return persistentMembers; }
+ }
+
public IEnumerable<SplitDefinition> SplitDefinitions
{
get { return splitDefinitions; }
@@ -245,6 +252,11 @@
properties.Add(member);
}
+ public void AddAsPersistentMember(MemberInfo member)
+ {
+ persistentMembers.Add(member);
+ }
+
public void AddAsPropertySplit(System.Type propertyContainer, string splitGroupId, MemberInfo member)
{
splitDefinitions.Add(new SplitDefinition(propertyContainer, splitGroupId, member));
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelExplicitDeclarationsHolderExtensions.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelExplicitDeclarationsHolderExtensions.cs 2011-04-08 05:48:54 UTC (rev 5640)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelExplicitDeclarationsHolderExtensions.cs 2011-04-08 14:13:21 UTC (rev 5641)
@@ -1,7 +1,4 @@
-using System;
-using System.Collections.Generic;
using System.Linq;
-using System.Reflection;
namespace NHibernate.Mapping.ByCode
{
@@ -37,6 +34,7 @@
System.Array.ForEach(source.Arrays.ToArray(), destination.AddAsArray);
System.Array.ForEach(source.Dictionaries.ToArray(), destination.AddAsMap);
System.Array.ForEach(source.Properties.ToArray(), destination.AddAsProperty);
+ System.Array.ForEach(source.PersistentMembers.ToArray(), destination.AddAsPersistentMember);
System.Array.ForEach(source.SplitDefinitions.ToArray(), x => destination.AddAsPropertySplit(x.On, x.GroupId, x.Member));
}
}
Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ClassWithComponentsTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ClassWithComponentsTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ClassWithComponentsTest.cs 2011-04-08 14:13:21 UTC (rev 5641)
@@ -0,0 +1,61 @@
+using System;
+using System.Linq;
+using NHibernate.Cfg.MappingSchema;
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.MappingByCode.ExpliticMappingTests
+{
+ public class ClassWithComponentsTest
+ {
+ public class Person1
+ {
+ public int Id { get; set; }
+ public string Test { get; set; }
+ public Name Name { get; set; }
+ public Address Address { get; set; }
+ }
+ public class Name
+ {
+ public string First { get; set; }
+ public string Last { get; set; }
+ }
+
+ public class Address
+ {
+ public string Street { get; set; }
+ public int CivicNumber { get; set; }
+ }
+ [Test]
+ public void ComponentMappingJustOnceDemo()
+ {
+ var mapper = new ModelMapper();
+ mapper.Component<Name>(comp =>
+ {
+ comp.Property(name => name.First);
+ comp.Property(name => name.Last);
+ });
+ mapper.Component<Address>(comp =>
+ {
+ comp.Property(address => address.CivicNumber);
+ comp.Property(address => address.Street);
+ });
+ mapper.Class<Person1>(cm =>
+ {
+ cm.Id(person => person.Id, map => map.Generator(Generators.HighLow));
+ cm.Property(person => person.Test);
+ cm.Component(person => person.Name, comp => { });
+ cm.Component(person => person.Address, comp => { });
+ });
+
+ var hbmMapping = mapper.CompileMappingForAllExplicitAddedEntities();
+
+ var hbmClass = hbmMapping.RootClasses[0];
+
+ var hbmComponents = hbmClass.Properties.OfType<HbmComponent>();
+ hbmComponents.Should().Have.Count.EqualTo(2);
+ hbmComponents.Select(x => x.Name).Should().Have.SameValuesAs("Name","Address");
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ModelExplicitDeclarationsHolderMergeTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ModelExplicitDeclarationsHolderMergeTest.cs 2011-04-08 05:48:54 UTC (rev 5640)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ModelExplicitDeclarationsHolderMergeTest.cs 2011-04-08 14:13:21 UTC (rev 5641)
@@ -29,6 +29,17 @@
}
[Test]
+ public void MergePersistentMembers()
+ {
+ var destination = new ExplicitDeclarationsHolder();
+ var source = new ExplicitDeclarationsHolder();
+ source.AddAsPersistentMember(property);
+
+ destination.Merge(source);
+ destination.PersistentMembers.Should().Have.Count.EqualTo(1);
+ }
+
+ [Test]
public void MergeProperties()
{
var destination = new ExplicitDeclarationsHolder();
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-08 05:48:54 UTC (rev 5640)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-08 14:13:21 UTC (rev 5641)
@@ -509,6 +509,7 @@
<Compile Include="Linq\ByMethod\SumTests.cs" />
<Compile Include="Logging\Log4NetLoggerTest.cs" />
<Compile Include="Logging\LoggerProviderTest.cs" />
+ <Compile Include="MappingByCode\ExpliticMappingTests\ClassWithComponentsTest.cs" />
<Compile Include="MappingByCode\ExpliticMappingTests\ConformistMappingRegistrationTests\ClassMappingRegistrationTest.cs" />
<Compile Include="MappingByCode\CustomizerHolderMergeTest.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\SplitPropertiesRegistrationTests.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|