|
From: <fab...@us...> - 2011-04-10 22:20:24
|
Revision: 5661
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5661&view=rev
Author: fabiomaulo
Date: 2011-04-10 22:20:17 +0000 (Sun, 10 Apr 2011)
Log Message:
-----------
SimpleModelInspector with default pattern to discover 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/EntityTests.cs
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs 2011-04-10 21:55:57 UTC (rev 5660)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/SimpleModelInspector.cs 2011-04-10 22:20:17 UTC (rev 5661)
@@ -43,6 +43,7 @@
public SimpleModelInspector()
{
+ isEntity = (t, declared) => declared || MatchEntity(t);
isPersistentId = (m, declared) => declared || MatchPoIdPattern(m);
isComponent = (t, declared) => declared || MatchComponentPattern(t);
isPersistentProperty = (m, declared) => declared || MatchNoReadOnlyPropertyPattern(m);
@@ -206,6 +207,16 @@
subject.GetFields(flattenHierarchyMembers)).Any(m => modelInspector.IsPersistentId(m));
}
+ protected bool MatchEntity(System.Type subject)
+ {
+ const BindingFlags flattenHierarchyMembers =
+ BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
+
+ var modelInspector = (IModelInspector) this;
+ return subject.IsClass &&
+ subject.GetProperties(flattenHierarchyMembers).Cast<MemberInfo>().Concat(subject.GetFields(flattenHierarchyMembers)).Any(m => modelInspector.IsPersistentId(m));
+ }
+
#region IModelExplicitDeclarationsHolder Members
IEnumerable<System.Type> IModelExplicitDeclarationsHolder.RootEntities
Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/EntityTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/EntityTests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MixAutomapping/EntityTests.cs 2011-04-10 22:20:17 UTC (rev 5661)
@@ -0,0 +1,78 @@
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.MappingByCode.MixAutomapping
+{
+ public class EntityTests
+ {
+ private class AComponent
+ {
+ public string S { get; set; }
+ }
+ private class AEntity
+ {
+ public int Id { get; set; }
+ }
+ private class Entity
+ {
+ private int id;
+ }
+
+ private enum Something
+ {
+
+ }
+
+ [Test]
+ public void WhenAClassIsExplicitlyDeclaredAsEntityThenIsEntity()
+ {
+ var autoinspector = new SimpleModelInspector();
+ var mapper = new ModelMapper(autoinspector);
+ mapper.Class<AComponent>(map => { });
+
+ var inspector = (IModelInspector)autoinspector;
+ inspector.IsEntity(typeof(AComponent)).Should().Be.True();
+ }
+
+ [Test]
+ public void ClassWithPoidIsEntity()
+ {
+ var autoinspector = new SimpleModelInspector();
+ var inspector = (IModelInspector)autoinspector;
+ inspector.IsEntity(typeof(AEntity)).Should().Be.True();
+ }
+
+ [Test]
+ public void ClassWithoutPoidIsNotEntity()
+ {
+ var autoinspector = new SimpleModelInspector();
+ var inspector = (IModelInspector)autoinspector;
+ inspector.IsEntity(typeof(AComponent)).Should().Be.False();
+ }
+
+ [Test]
+ public void ClassWithPoidFieldIsEntity()
+ {
+ var autoinspector = new SimpleModelInspector();
+ var inspector = (IModelInspector)autoinspector;
+ inspector.IsEntity(typeof(Entity)).Should().Be.True();
+ }
+
+ [Test]
+ public void EnumIsNotEntity()
+ {
+ var autoinspector = new SimpleModelInspector();
+ var inspector = (IModelInspector)autoinspector;
+ inspector.IsEntity(typeof(Something)).Should().Be.False();
+ }
+
+ [Test]
+ public void StringIsNotEntity()
+ {
+ var autoinspector = new SimpleModelInspector();
+ var inspector = (IModelInspector)autoinspector;
+ inspector.IsEntity(typeof(string)).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 21:55:57 UTC (rev 5660)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-10 22:20:17 UTC (rev 5661)
@@ -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\EntityTests.cs" />
<Compile Include="MappingByCode\MixAutomapping\ManyToOneTest.cs" />
<Compile Include="MappingByCode\MixAutomapping\OneToManyTests.cs" />
<Compile Include="MappingByCode\MixAutomapping\PoidTests.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|