From: <fab...@us...> - 2011-04-20 21:59:30
|
Revision: 5730 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5730&view=rev Author: fabiomaulo Date: 2011-04-20 21:59:24 +0000 (Wed, 20 Apr 2011) Log Message: ----------- Entities and Component mappers supporting dynamic-component Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AbstractBasePropertyContainerMapper.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AbstractPropertyContainerMapperTest.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AbstractBasePropertyContainerMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AbstractBasePropertyContainerMapper.cs 2011-04-20 21:46:13 UTC (rev 5729) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AbstractBasePropertyContainerMapper.cs 2011-04-20 21:59:24 UTC (rev 5730) @@ -68,7 +68,9 @@ { throw new ArgumentOutOfRangeException("property", "Can't add a property of another graph"); } - throw new NotImplementedException(); + var hbm = new HbmDynamicComponent { name = property.Name }; + mapping(new DynamicComponentMapper(hbm, property, MapDoc)); + AddProperty(hbm); } public virtual void ManyToOne(MemberInfo property, Action<IManyToOneMapper> mapping) Modified: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AbstractPropertyContainerMapperTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AbstractPropertyContainerMapperTest.cs 2011-04-20 21:46:13 UTC (rev 5729) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AbstractPropertyContainerMapperTest.cs 2011-04-20 21:59:24 UTC (rev 5730) @@ -1,7 +1,9 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode; using NHibernate.Mapping.ByCode.Impl; using NUnit.Framework; using SharpTestsEx; @@ -31,6 +33,10 @@ { public IDictionary<string, string> Dictionary { get; set; } } + private class MyClassWithDynamic + { + public IDictionary DynCompo { get; set; } + } [Test] public void CantCreateWithoutHbmMapping() @@ -111,6 +117,25 @@ elementRelationCalled.Should().Be.True(); } + [Test] + public void AddDynamicComponentProperty() + { + var properties = new List<object>(); + var map = new StubPropertyContainerMapper<MyClassWithDynamic>(properties); + map.Component(For<MyClassWithDynamic>.Property(x => x.DynCompo), (IDynamicComponentMapper cp) => { }); + properties.Single().Should().Be.OfType<HbmDynamicComponent>().And.ValueOf.Name.Should().Be.EqualTo("DynCompo"); + } + + [Test] + public void CallDynamicComponentMapper() + { + var properties = new List<object>(); + var map = new StubPropertyContainerMapper<MyClassWithDynamic>(properties); + var called = false; + map.Component(For<MyClassWithDynamic>.Property(x=> x.DynCompo), (IDynamicComponentMapper cp) => called = true); + called.Should().Be.True(); + } + private class HackPropertyContainerMapper : AbstractPropertyContainerMapper { public HackPropertyContainerMapper(System.Type container, HbmMapping mapDoc) : base(container, mapDoc) {} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |