From: <fab...@us...> - 2011-04-05 22:04:05
|
Revision: 5617 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5617&view=rev Author: fabiomaulo Date: 2011-04-05 22:03:58 +0000 (Tue, 05 Apr 2011) Log Message: ----------- IdBag mapper Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Generators.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorDef.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/IIdBagPropertiesMapper.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdBagMapper.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdBagMapperTest.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CollectionIdMapper.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/CollectionIdMapperTests.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Generators.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Generators.cs 2011-04-05 20:53:30 UTC (rev 5616) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Generators.cs 2011-04-05 22:03:58 UTC (rev 5617) @@ -50,6 +50,16 @@ get { return null; } } + public System.Type DefaultReturnType + { + get { return null; } + } + + public bool SupportedAsCollectionElementId + { + get { return false; } + } + #endregion } @@ -78,6 +88,16 @@ get { return param; } } + public System.Type DefaultReturnType + { + get { return null; } + } + + public bool SupportedAsCollectionElementId + { + get { return false; } + } + #endregion } @@ -95,6 +115,16 @@ get { return null; } } + public System.Type DefaultReturnType + { + get { return typeof(int); } + } + + public bool SupportedAsCollectionElementId + { + get { return true; } + } + #endregion } @@ -112,6 +142,15 @@ get { return null; } } + public System.Type DefaultReturnType + { + get { return typeof(int); } + } + + public bool SupportedAsCollectionElementId + { + get { return true; } + } #endregion } @@ -129,6 +168,15 @@ get { return null; } } + public System.Type DefaultReturnType + { + get { return typeof(Guid); } + } + + public bool SupportedAsCollectionElementId + { + get { return true; } + } #endregion } @@ -146,6 +194,15 @@ get { return null; } } + public System.Type DefaultReturnType + { + get { return typeof(Guid); } + } + + public bool SupportedAsCollectionElementId + { + get { return true; } + } #endregion } @@ -163,6 +220,15 @@ get { return null; } } + public System.Type DefaultReturnType + { + get { return typeof(int); } + } + + public bool SupportedAsCollectionElementId + { + get { return true; } + } #endregion } @@ -180,6 +246,15 @@ get { return null; } } + public System.Type DefaultReturnType + { + get { return typeof(int); } + } + + public bool SupportedAsCollectionElementId + { + get { return true; } + } #endregion } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorDef.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorDef.cs 2011-04-05 20:53:30 UTC (rev 5616) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorDef.cs 2011-04-05 22:03:58 UTC (rev 5617) @@ -4,5 +4,7 @@ { string Class { get; } object Params { get; } + System.Type DefaultReturnType { get; } + bool SupportedAsCollectionElementId { get; } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IIdBagPropertiesMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IIdBagPropertiesMapper.cs 2011-04-05 20:53:30 UTC (rev 5616) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IIdBagPropertiesMapper.cs 2011-04-05 22:03:58 UTC (rev 5617) @@ -3,11 +3,11 @@ { public interface IIdBagPropertiesMapper : ICollectionPropertiesMapper { - void Id(Action<ICollectionIdMapper> idMapper); + void Id(Action<ICollectionIdMapper> idMapping); } public interface IIdBagPropertiesMapper<TEntity, TElement> : ICollectionPropertiesMapper<TEntity, TElement> where TEntity : class { - void Id(Action<ICollectionIdMapper> idMapper); + void Id(Action<ICollectionIdMapper> idMapping); } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CollectionIdMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CollectionIdMapper.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CollectionIdMapper.cs 2011-04-05 22:03:58 UTC (rev 5617) @@ -0,0 +1,96 @@ +using System; +using System.Linq; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Type; + +namespace NHibernate.Mapping.ByCode.Impl +{ + public class CollectionIdMapper: ICollectionIdMapper + { + private readonly HbmCollectionId hbmId; + private const string DefaultColumnName = "collection_key"; + private string autosetType; + + public CollectionIdMapper(HbmCollectionId hbmId) + { + this.hbmId = hbmId; + this.hbmId.column1 = DefaultColumnName; + Generator(Generators.Guid); + } + + #region Implementation of IIdMapper + + public void Generator(IGeneratorDef generator) + { + Generator(generator, x => { }); + } + + public void Generator(IGeneratorDef generator, Action<IGeneratorMapper> generatorMapping) + { + if (generator == null) + { + return; + } + if(!generator.SupportedAsCollectionElementId) + { + throw new NotSupportedException("The generator '" + generator.Class + "' cannot be used as collection element id."); + } + ApplyGenerator(generator); + generatorMapping(new GeneratorMapper(hbmId.generator)); + } + + public void Type(IIdentifierType persistentType) + { + if (persistentType != null) + { + hbmId.type = persistentType.Name; + } + } + + public void Column(string name) + { + if (string.IsNullOrEmpty(name)) + { + return; + } + hbmId.column1 = name; + } + + public void Length(int length) + { + hbmId.length = length.ToString(); + } + + private void ApplyGenerator(IGeneratorDef generator) + { + var hbmGenerator = new HbmGenerator { @class = generator.Class }; + object generatorParameters = generator.Params; + if (generatorParameters != null) + { + hbmGenerator.param = (from pi in generatorParameters.GetType().GetProperties() + let pname = pi.Name + let pvalue = pi.GetValue(generatorParameters, null) + select + new HbmParam { name = pname, Text = new[] { ReferenceEquals(pvalue, null) ? "null" : pvalue.ToString() } }). + ToArray(); + } + else + { + hbmGenerator.param = null; + } + hbmId.generator = hbmGenerator; + AutosetTypeThroughGeneratorDef(generator); + } + + #endregion + + private void AutosetTypeThroughGeneratorDef(IGeneratorDef generator) + { + if (Equals(hbmId.type, autosetType) && generator.DefaultReturnType != null) + { + autosetType = generator.DefaultReturnType.GetNhTypeName(); + hbmId.type = autosetType; + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdBagMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdBagMapper.cs 2011-04-05 20:53:30 UTC (rev 5616) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdBagMapper.cs 2011-04-05 22:03:58 UTC (rev 5617) @@ -13,8 +13,9 @@ private readonly KeyMapper keyMapper; private readonly HbmIdbag mapping; private ICacheMapper cacheMapper; + private readonly CollectionIdMapper idMapper; - public IdBagMapper(System.Type ownerType, System.Type elementType, System.Type idType, HbmIdbag mapping) + public IdBagMapper(System.Type ownerType, System.Type elementType, HbmIdbag mapping) { if (ownerType == null) { @@ -36,6 +37,11 @@ mapping.key = new HbmKey(); } keyMapper = new KeyMapper(ownerType, mapping.Key); + if (mapping.collectionid == null) + { + mapping.collectionid = new HbmCollectionId(); + } + idMapper = new CollectionIdMapper(mapping.collectionid); entityPropertyMapper = new AccessorPropertyMapper(ownerType, mapping.Name, x => mapping.access = x); } @@ -185,9 +191,9 @@ mapping.fetchSpecified = mapping.fetch != HbmCollectionFetchMode.Select; } - public void Id(Action<ICollectionIdMapper> idMapper) + public void Id(Action<ICollectionIdMapper> idMapping) { - throw new NotImplementedException(); + idMapping(idMapper); } #endregion Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-05 20:53:30 UTC (rev 5616) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-05 22:03:58 UTC (rev 5617) @@ -332,6 +332,7 @@ <Compile Include="Mapping\ByCode\Impl\CascadeConverter.cs" /> <Compile Include="Mapping\ByCode\Impl\ClassMapper.cs" /> <Compile Include="Mapping\ByCode\Impl\CollectionElementRelation.cs" /> + <Compile Include="Mapping\ByCode\Impl\CollectionIdMapper.cs" /> <Compile Include="Mapping\ByCode\Impl\ColumnMapper.cs" /> <Compile Include="Mapping\ByCode\Impl\ComponentElementMapper.cs" /> <Compile Include="Mapping\ByCode\Impl\ComponentMapKeyMapper.cs" /> Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/CollectionIdMapperTests.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/CollectionIdMapperTests.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/CollectionIdMapperTests.cs 2011-04-05 22:03:58 UTC (rev 5617) @@ -0,0 +1,122 @@ +using System; +using System.Linq; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode; +using NHibernate.Mapping.ByCode.Impl; +using NHibernate.Type; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.MappersTests +{ + public class CollectionIdMapperTests + { + [Test] + public void WhenCreateThenHasDefaultTypeAndGenerator() + { + var hbmId = new HbmCollectionId(); + new CollectionIdMapper(hbmId); + hbmId.generator.@class.Should().Not.Be.NullOrEmpty(); + hbmId.type.Should().Not.Be.NullOrEmpty(); + } + + [Test] + public void WhenSetGeneratorThenChangeType() + { + var hbmId = new HbmCollectionId(); + new CollectionIdMapper(hbmId).Generator(Generators.HighLow); + + hbmId.generator.@class.Should().Be.EqualTo("hilo"); + hbmId.type.ToLowerInvariant().Should().Contain("int"); + } + + [Test] + public void WhenForceTypeThenNotChangeType() + { + var hbmId = new HbmCollectionId(); + var collectionIdMapper = new CollectionIdMapper(hbmId); + collectionIdMapper.Type((IIdentifierType) NHibernateUtil.Int64); + collectionIdMapper.Generator(Generators.HighLow); + + hbmId.generator.@class.Should().Be.EqualTo("hilo"); + hbmId.type.Should().Be("Int64"); + } + + [Test] + public void CanSetGenerator() + { + var hbmId = new HbmCollectionId(); + new CollectionIdMapper(hbmId).Generator(Generators.HighLow); + hbmId.generator.@class.Should().Be.EqualTo("hilo"); + } + + [Test] + public void CanSetGeneratorWithParameters() + { + var hbmId = new HbmCollectionId(); + new CollectionIdMapper(hbmId).Generator(Generators.HighLow, p => p.Params(new { max_low = 99, where = "TableName" })); + hbmId.generator.@class.Should().Be.EqualTo("hilo"); + hbmId.generator.param.Should().Have.Count.EqualTo(2); + hbmId.generator.param.Select(p => p.name).Should().Have.SameValuesAs("max_low", "where"); + hbmId.generator.param.Select(p => p.GetText()).Should().Have.SameValuesAs("99", "TableName"); + } + + [Test] + public void CanSetGeneratorGuid() + { + var hbmId = new HbmCollectionId(); + new CollectionIdMapper(hbmId).Generator(Generators.Guid); + hbmId.generator.@class.Should().Be.EqualTo("guid"); + } + + [Test] + public void CanSetGeneratorGuidComb() + { + var hbmId = new HbmCollectionId(); + new CollectionIdMapper(hbmId).Generator(Generators.GuidComb); + hbmId.generator.@class.Should().Be.EqualTo("guid.comb"); + } + + [Test] + public void CanSetGeneratorSequence() + { + var hbmId = new HbmCollectionId(); + new CollectionIdMapper(hbmId).Generator(Generators.Sequence); + hbmId.generator.@class.Should().Be.EqualTo("sequence"); + } + + [Test] + public void CanSetGeneratorIdentity() + { + var hbmId = new HbmCollectionId(); + new CollectionIdMapper(hbmId).Generator(Generators.Identity); + hbmId.generator.@class.Should().Be.EqualTo("identity"); + } + + [Test] + public void CantSetGeneratorAssigned() + { + var hbmId = new HbmCollectionId(); + var collectionIdMapper = new CollectionIdMapper(hbmId); + collectionIdMapper.Executing(x=> x.Generator(Generators.Assigned)).Throws<NotSupportedException>(); + } + + [Test] + public void CanSetColumnName() + { + var hbmId = new HbmCollectionId(); + var mapper = new CollectionIdMapper(hbmId); + mapper.Column("MyName"); + hbmId.Columns.Single().name.Should().Be("MyName"); + } + + [Test] + public void CanSetLength() + { + var hbmId = new HbmCollectionId(); + var mapper = new CollectionIdMapper(hbmId); + mapper.Length(10); + hbmId.length.Should().Be("10"); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdBagMapperTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdBagMapperTest.cs 2011-04-05 20:53:30 UTC (rev 5616) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdBagMapperTest.cs 2011-04-05 22:03:58 UTC (rev 5617) @@ -22,10 +22,41 @@ } [Test] + public void WhenCreatedHasId() + { + var hbm = new HbmIdbag(); + new IdBagMapper(typeof(Animal), typeof(Animal), hbm); + hbm.collectionid.Should().Not.Be.Null(); + } + + [Test] + public void WhenConfigureIdMoreThanOnceThenUseSameMapper() + { + var hbm = new HbmIdbag(); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); + ICollectionIdMapper firstInstance = null; + ICollectionIdMapper secondInstance = null; + mapper.Id(x => firstInstance = x); + mapper.Id(x => secondInstance = x); + + firstInstance.Should().Be.SameInstanceAs(secondInstance); + } + + [Test] + public void WhenConfigureIdThenCallMapper() + { + var hbm = new HbmIdbag(); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); + mapper.Id(x => x.Column("catchMe")); + + hbm.collectionid.Columns.Single().name.Should().Be("catchMe"); + } + + [Test] public void SetInverse() { var hbm = new HbmIdbag(); - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Inverse(true); hbm.Inverse.Should().Be.True(); mapper.Inverse(false); @@ -36,7 +67,7 @@ public void SetMutable() { var hbm = new HbmIdbag(); - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Mutable(true); hbm.Mutable.Should().Be.True(); mapper.Mutable(false); @@ -47,7 +78,7 @@ public void SetWhere() { var hbm = new HbmIdbag(); - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Where("c > 10"); hbm.Where.Should().Be.EqualTo("c > 10"); } @@ -56,7 +87,7 @@ public void SetBatchSize() { var hbm = new HbmIdbag(); - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.BatchSize(10); hbm.BatchSize.Should().Be.EqualTo(10); } @@ -65,7 +96,7 @@ public void SetLazy() { var hbm = new HbmIdbag(); - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Lazy(CollectionLazy.Extra); hbm.Lazy.Should().Be.EqualTo(HbmCollectionLazy.Extra); mapper.Lazy(CollectionLazy.NoLazy); @@ -78,7 +109,7 @@ public void CallKeyMapper() { var hbm = new HbmIdbag(); - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); bool kmCalled = false; mapper.Key(km => kmCalled = true); hbm.Key.Should().Not.Be.Null(); @@ -89,7 +120,7 @@ public void SetCollectionTypeByWrongTypeShouldThrow() { var hbm = new HbmIdbag(); - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); Executing.This(() => mapper.Type(null)).Should().Throw<ArgumentNullException>(); Executing.This(() => mapper.Type(typeof(object))).Should().Throw<ArgumentOutOfRangeException>(); } @@ -98,7 +129,7 @@ public void SetCollectionTypeByGenericType() { var hbm = new HbmIdbag(); - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Type<FakeUserCollectionType>(); hbm.CollectionType.Should().Contain("FakeUserCollectionType"); } @@ -107,7 +138,7 @@ public void SetCollectionTypeByType() { var hbm = new HbmIdbag(); - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Type(typeof(FakeUserCollectionType)); hbm.CollectionType.Should().Contain("FakeUserCollectionType"); } @@ -116,7 +147,7 @@ public void CanChangeAccessor() { var hbm = new HbmIdbag { name = "Children" }; - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Access(Accessor.Field); hbm.Access.Should().Not.Be.Null(); @@ -126,7 +157,7 @@ public void CanSetCache() { var hbm = new HbmIdbag { name = "Children" }; - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Cache(x => x.Region("pizza")); hbm.cache.Should().Not.Be.Null(); @@ -136,7 +167,7 @@ public void WhenSetTwoCachePropertiesInTwoActionsThenSetTheTwoValuesWithoutLostTheFirst() { var hbm = new HbmIdbag { name = "Children" }; - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Cache(ch => ch.Region("pizza")); mapper.Cache(ch => ch.Usage(CacheUsage.NonstrictReadWrite)); @@ -150,7 +181,7 @@ public void CanSetAFilterThroughAction() { var hbm = new HbmIdbag { name = "Children" }; - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Filter("filter1", f => f.Condition("condition1")); hbm.filter.Length.Should().Be(1); hbm.filter[0].Satisfy(f => f.name == "filter1" && f.condition == "condition1"); @@ -160,7 +191,7 @@ public void CanSetMoreFiltersThroughAction() { var hbm = new HbmIdbag { name = "Children" }; - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Filter("filter1", f => f.Condition("condition1")); mapper.Filter("filter2", f => f.Condition("condition2")); hbm.filter.Length.Should().Be(2); @@ -172,7 +203,7 @@ public void WhenSameNameThenOverrideCondition() { var hbm = new HbmIdbag { name = "Children" }; - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Filter("filter1", f => f.Condition("condition1")); mapper.Filter("filter2", f => f.Condition("condition2")); mapper.Filter("filter1", f => f.Condition("anothercondition1")); @@ -185,7 +216,7 @@ public void WhenActionIsNullThenAddFilterName() { var hbm = new HbmIdbag { name = "Children" }; - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Filter("filter1", null); hbm.filter.Length.Should().Be(1); hbm.filter[0].Satisfy(f => f.name == "filter1" && f.condition == null); @@ -195,7 +226,7 @@ public void SetFetchMode() { var hbm = new HbmIdbag(); - var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), typeof(int), hbm); + var mapper = new IdBagMapper(typeof(Animal), typeof(Animal), hbm); mapper.Fetch(CollectionFetchMode.Subselect); hbm.fetch.Should().Be(HbmCollectionFetchMode.Subselect); hbm.fetchSpecified.Should().Be.True(); Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-05 20:53:30 UTC (rev 5616) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-05 22:03:58 UTC (rev 5617) @@ -528,6 +528,7 @@ <Compile Include="MappingByCode\For.cs" /> <Compile Include="MappingByCode\MappersTests\AbstractPropertyContainerMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\ClassMapperWithJoinPropertiesTest.cs" /> + <Compile Include="MappingByCode\MappersTests\CollectionIdMapperTests.cs" /> <Compile Include="MappingByCode\MappersTests\FakeUserCollectionType.cs" /> <Compile Include="MappingByCode\MappersTests\IdBagMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\JoinMapperTests.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |