|
From: <fab...@us...> - 2011-04-10 21:14:36
|
Revision: 5659
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5659&view=rev
Author: fabiomaulo
Date: 2011-04-10 21:14:30 +0000 (Sun, 10 Apr 2011)
Log Message:
-----------
SimpleModelInspector with default pattern to discover ManyToOne properties
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/ManyToOneTest.cs
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs 2011-04-10 20:48:38 UTC (rev 5658)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs 2011-04-10 21:14:30 UTC (rev 5659)
@@ -29,7 +29,7 @@
private Func<MemberInfo, bool, bool> isProperty = (m, declared) => declared;
private Func<MemberInfo, bool, bool> isAny = (m, declared) => declared;
private Func<MemberInfo, bool, bool> isManyToMany = (m, declared) => declared;
- private Func<MemberInfo, bool, bool> isManyToOne = (m, declared) => declared;
+ private Func<MemberInfo, bool, bool> isManyToOne;
private Func<MemberInfo, bool, bool> isMemberOfNaturalId = (m, declared) => declared;
private Func<MemberInfo, bool, bool> isOneToMany = (m, declared) => declared;
private Func<MemberInfo, bool, bool> isOneToOne = (m, declared) => declared;
@@ -50,8 +50,20 @@
isArray = (m, declared) => declared || MatchCollection(m, MatchArrayMember);
isBag = (m, declared) => declared || MatchCollection(m, MatchBagMember);
isDictionary = (m, declared) => declared || MatchCollection(m, MatchDictionaryMember);
+ isManyToOne = (m, declared) => declared || MatchManyToOne(m);
}
+ private bool MatchManyToOne(MemberInfo memberInfo)
+ {
+ var modelInspector = (IModelInspector)this;
+ System.Type from = memberInfo.ReflectedType;
+ System.Type to = memberInfo.GetPropertyOrFieldType();
+
+ bool areEntities = modelInspector.IsEntity(from) && modelInspector.IsEntity(to);
+ bool isFromComponentToEntity = modelInspector.IsComponent(from) && modelInspector.IsEntity(to);
+ return isFromComponentToEntity || (areEntities && !modelInspector.IsOneToOne(memberInfo));
+ }
+
protected bool MatchArrayMember(MemberInfo subject)
{
System.Type memberType = subject.GetPropertyOrFieldType();
Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/ManyToOneTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/ManyToOneTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/ManyToOneTest.cs 2011-04-10 21:14:30 UTC (rev 5659)
@@ -0,0 +1,63 @@
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.MappingByCode.MixAutomapping
+{
+ public class ManyToOneTest
+ {
+ private class AEntity
+ {
+ public int Id { get; set; }
+ public BEntity B { get; set; }
+ public string Name { get; set; }
+ }
+
+ private class BEntity
+ {
+ public int Id { get; set; }
+ }
+
+ [Test]
+ public void WhenRelationWithTwoEntityThenIsManyToOne()
+ {
+ var autoinspector = new SimpleModelInspector();
+ autoinspector.IsEntity((t, declared) => typeof(AEntity).Equals(t) || typeof(BEntity).Equals(t));
+
+ var inspector = (IModelInspector)autoinspector;
+ inspector.IsManyToOne(typeof(AEntity).GetProperty("B")).Should().Be.True();
+ }
+
+ [Test]
+ public void WhenSimplePropertyThenIsNotManyToOne()
+ {
+ var autoinspector = new SimpleModelInspector();
+ autoinspector.IsEntity((t, declared) => typeof(AEntity).Equals(t) || typeof(BEntity).Equals(t));
+
+ var inspector = (IModelInspector)autoinspector;
+ inspector.IsManyToOne(typeof(AEntity).GetProperty("Name")).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRelatedMatchComponentThenIsNotManyToOne()
+ {
+ var autoinspector = new SimpleModelInspector();
+ autoinspector.IsEntity((t, declared) => typeof(AEntity).Equals(t));
+ autoinspector.IsComponent((t, declared) => typeof(BEntity).Equals(t));
+
+ var inspector = (IModelInspector)autoinspector;
+ inspector.IsManyToOne(typeof(AEntity).GetProperty("B")).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRelatedDeclaredAsOneToOneThenIsNotManyToOne()
+ {
+ var autoinspector = new SimpleModelInspector();
+ var mapper = new ModelMapper(autoinspector);
+ mapper.Class<AEntity>(map => map.OneToOne(a => a.B, x => { }));
+ mapper.Class<BEntity>(x=> { });
+ var inspector = (IModelInspector)autoinspector;
+ inspector.IsManyToOne(typeof(AEntity).GetProperty("B")).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 20:48:38 UTC (rev 5658)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-10 21:14:30 UTC (rev 5659)
@@ -545,6 +545,7 @@
<Compile Include="MappingByCode\MixAutomapping\BagCollectionTests.cs" />
<Compile Include="MappingByCode\MixAutomapping\ComponentsTests.cs" />
<Compile Include="MappingByCode\MixAutomapping\DictionaryCollectionTests.cs" />
+ <Compile Include="MappingByCode\MixAutomapping\ManyToOneTest.cs" />
<Compile Include="MappingByCode\MixAutomapping\PoidTests.cs" />
<Compile Include="MappingByCode\MixAutomapping\PropertiesExclusionTests.cs" />
<Compile Include="MappingByCode\MixAutomapping\SetCollectionTests.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|