From: <fab...@us...> - 2011-04-10 22:50:12
|
Revision: 5662 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5662&view=rev Author: fabiomaulo Date: 2011-04-10 22:50:06 +0000 (Sun, 10 Apr 2011) Log Message: ----------- SimpleModelInspector with default pattern to discover TablePerClass entities Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/DefaultClassHierarchyRepresentationTests.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs 2011-04-10 22:20:17 UTC (rev 5661) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs 2011-04-10 22:50:06 UTC (rev 5662) @@ -15,7 +15,7 @@ private Func<System.Type, bool, bool> isEntity = (t, declared) => declared; private Func<System.Type, bool, bool> isRootEntity = (t, declared) => declared; - private Func<System.Type, bool, bool> isTablePerClass = (t, declared) => declared; + private Func<System.Type, bool, bool> isTablePerClass; private Func<SplitDefinition, bool, bool> isTablePerClassSplit = (sd, declared) => declared; private Func<System.Type, bool, bool> isTablePerClassHierarchy = (t, declared) => declared; private Func<System.Type, bool, bool> isTablePerConcreteClass = (t, declared) => declared; @@ -44,6 +44,7 @@ public SimpleModelInspector() { isEntity = (t, declared) => declared || MatchEntity(t); + isTablePerClass = (t, declared) => declared || MatchTablePerClass(t); isPersistentId = (m, declared) => declared || MatchPoIdPattern(m); isComponent = (t, declared) => declared || MatchComponentPattern(t); isPersistentProperty = (m, declared) => declared || MatchNoReadOnlyPropertyPattern(m); @@ -55,6 +56,11 @@ isOneToMany = (m, declared) => declared || MatchOneToMany(m); } + private bool MatchTablePerClass(System.Type type) + { + return !declaredModel.IsTablePerClassHierarchy(type) && !declaredModel.IsTablePerConcreteClass(type); + } + private bool MatchOneToMany(MemberInfo memberInfo) { var modelInspector = (IModelInspector) this; Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/DefaultClassHierarchyRepresentationTests.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/DefaultClassHierarchyRepresentationTests.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/DefaultClassHierarchyRepresentationTests.cs 2011-04-10 22:50:06 UTC (rev 5662) @@ -0,0 +1,58 @@ +using NHibernate.Mapping.ByCode; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.MixAutomapping +{ + public class DefaultClassHierarchyRepresentationTests + { + private class MyClass + { + public int Id { get; set; } + } + + private class Inherited: MyClass + { + } + + [Test] + public void WhenNotExplicitlyDeclaredThenIsTablePerClass() + { + var autoinspector = new SimpleModelInspector(); + var mapper = new ModelMapper(autoinspector); + mapper.Class<MyClass>(x => { }); + var inspector = (IModelInspector)autoinspector; + + inspector.IsTablePerClass(typeof(MyClass)).Should().Be.True(); + inspector.IsTablePerClass(typeof(Inherited)).Should().Be.True(); + } + + [Test] + public void WhenExplicitlyDeclaredAsSubclassThenIsNotTablePerClass() + { + var autoinspector = new SimpleModelInspector(); + var mapper = new ModelMapper(autoinspector); + mapper.Class<MyClass>(x => { }); + mapper.Subclass<Inherited>(x => { }); + + var inspector = (IModelInspector)autoinspector; + + inspector.IsTablePerClass(typeof(MyClass)).Should().Be.False(); + inspector.IsTablePerClass(typeof(Inherited)).Should().Be.False(); + } + + [Test] + public void WhenExplicitlyDeclaredAsUnionSubclassThenIsNotTablePerClass() + { + var autoinspector = new SimpleModelInspector(); + var mapper = new ModelMapper(autoinspector); + mapper.Class<MyClass>(x => { }); + mapper.UnionSubclass<Inherited>(x => { }); + + var inspector = (IModelInspector)autoinspector; + + inspector.IsTablePerClass(typeof(MyClass)).Should().Be.False(); + inspector.IsTablePerClass(typeof(Inherited)).Should().Be.False(); + } + } +} \ 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-10 22:20:17 UTC (rev 5661) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-10 22:50:06 UTC (rev 5662) @@ -544,6 +544,7 @@ <Compile Include="MappingByCode\MixAutomapping\ArrayCollectionTests.cs" /> <Compile Include="MappingByCode\MixAutomapping\BagCollectionTests.cs" /> <Compile Include="MappingByCode\MixAutomapping\ComponentsTests.cs" /> + <Compile Include="MappingByCode\MixAutomapping\DefaultClassHierarchyRepresentationTests.cs" /> <Compile Include="MappingByCode\MixAutomapping\DictionaryCollectionTests.cs" /> <Compile Include="MappingByCode\MixAutomapping\EntityTests.cs" /> <Compile Include="MappingByCode\MixAutomapping\ManyToOneTest.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |