|
From: <fab...@us...> - 2011-04-06 17:38:15
|
Revision: 5625
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5625&view=rev
Author: fabiomaulo
Date: 2011-04-06 17:38:08 +0000 (Wed, 06 Apr 2011)
Log Message:
-----------
Add Conformist mapping without use strongly typed method
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelMapper.cs
trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ClassMappingRegistrationTest.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ModelMapperAddMappingByTypeTests.cs
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelMapper.cs 2011-04-06 17:05:20 UTC (rev 5624)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelMapper.cs 2011-04-06 17:38:08 UTC (rev 5625)
@@ -1607,5 +1607,36 @@
thisCustomizerHolder.Merge(otherCustomizerHolder);
explicitDeclarationsHolder.Merge(mapping.ExplicitDeclarationsHolder);
}
+
+ public void AddMapping(System.Type type)
+ {
+ object mappingInstance;
+ try
+ {
+ mappingInstance = Activator.CreateInstance(type);
+ }
+ catch (Exception e)
+ {
+ throw new MappingException("Unable to instantiate mapping class (see InnerException): " + type, e);
+ }
+
+ var mapping = mappingInstance as IConformistHoldersProvider;
+ if(mapping == null)
+ {
+ throw new ArgumentOutOfRangeException("type", "The mapping class must be an implementation of IConformistHoldersProvider.");
+ }
+ var thisCustomizerHolder = customizerHolder as CustomizersHolder;
+ if (thisCustomizerHolder == null)
+ {
+ throw new NotSupportedException("To merge 'conformist' mappings, the instance of ICustomizersHolder, provided in the ModelMapper constructor, have to be a CustomizersHolder instance.");
+ }
+ var otherCustomizerHolder = mapping.CustomizersHolder as CustomizersHolder;
+ if (otherCustomizerHolder == null)
+ {
+ throw new NotSupportedException("The mapping class have to provide a CustomizersHolder instance.");
+ }
+ thisCustomizerHolder.Merge(otherCustomizerHolder);
+ explicitDeclarationsHolder.Merge(mapping.ExplicitDeclarationsHolder);
+ }
}
}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ClassMappingRegistrationTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ClassMappingRegistrationTest.cs 2011-04-06 17:05:20 UTC (rev 5624)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ClassMappingRegistrationTest.cs 2011-04-06 17:38:08 UTC (rev 5625)
@@ -49,5 +49,27 @@
hbmProperty.name.Should().Be("Something");
hbmProperty.length.Should().Be("150");
}
+
+ [Test]
+ public void WhenRegisterClassMappingThroughTypeThenMapTheClass()
+ {
+ var mapper = new ModelMapper();
+ mapper.AddMapping(typeof(MyClassMap));
+ var hbmMapping = mapper.CompileMappingFor(new[] { typeof(MyClass) });
+
+ var hbmClass = hbmMapping.RootClasses[0];
+ hbmClass.Should().Not.Be.Null();
+ var hbmId = hbmClass.Id;
+ hbmId.Should().Not.Be.Null();
+ hbmId.name.Should().Be("Id");
+ var hbmGenerator = hbmId.generator;
+ hbmGenerator.Should().Not.Be.Null();
+ hbm...@cl...().Be("hilo");
+ hbmGenerator.param[0].name.Should().Be("max_low");
+ hbmGenerator.param[0].GetText().Should().Be("100");
+ var hbmProperty = hbmClass.Properties.OfType<HbmProperty>().Single();
+ hbmProperty.name.Should().Be("Something");
+ hbmProperty.length.Should().Be("150");
+ }
}
}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ModelMapperAddMappingByTypeTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ModelMapperAddMappingByTypeTests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExpliticMappingTests/ConformistMappingRegistrationTests/ModelMapperAddMappingByTypeTests.cs 2011-04-06 17:38:08 UTC (rev 5625)
@@ -0,0 +1,31 @@
+using System;
+using NUnit.Framework;
+using NHibernate.Mapping.ByCode;
+using SharpTestsEx;
+
+namespace NHibernate.Test.MappingByCode.ExpliticMappingTests.ConformistMappingRegistrationTests
+{
+ public class ModelMapperAddMappingByTypeTests
+ {
+ public class WithOutPublicParameterLessCtor
+ {
+ public WithOutPublicParameterLessCtor(string something)
+ {
+ }
+ }
+
+ [Test]
+ public void WhenRegisterClassMappingThroughTypeThenCheckIConformistHoldersProvider()
+ {
+ var mapper = new ModelMapper();
+ mapper.Executing(x => x.AddMapping(typeof(object))).Throws<ArgumentOutOfRangeException>().And.ValueOf.Message.Should().Contain("IConformistHoldersProvider");
+ }
+
+ [Test]
+ public void WhenRegisterClassMappingThroughTypeThenCheckParameterLessCtor()
+ {
+ var mapper = new ModelMapper();
+ mapper.Executing(x => x.AddMapping(typeof(WithOutPublicParameterLessCtor))).Throws<MappingException>();
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-06 17:05:20 UTC (rev 5624)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-06 17:38:08 UTC (rev 5625)
@@ -521,6 +521,7 @@
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\SubclassSequenceRegistrationTests.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\UnionSubclassMappingStrategyTests.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\UnionSubclassSequenceRegistrationTests.cs" />
+ <Compile Include="MappingByCode\ExpliticMappingTests\ConformistMappingRegistrationTests\ModelMapperAddMappingByTypeTests.cs" />
<Compile Include="MappingByCode\ExpliticMappingTests\IdBagMappingTest.cs" />
<Compile Include="MappingByCode\ExpliticMappingTests\MappingOfPrivateMembersOnRootEntity.cs" />
<Compile Include="MappingByCode\ExpliticMappingTests\NaturalIdTests.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|