From: <fab...@us...> - 2011-04-02 23:00:49
|
Revision: 5586 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5586&view=rev Author: fabiomaulo Date: 2011-04-02 23:00:42 +0000 (Sat, 02 Apr 2011) Log Message: ----------- - Domain to play with the API (note incomplete mapping) - some API simplifications - ported extensions to create the XML mapping to ask for support in forums. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionElementRelation.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentElementMapper.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapKeyMapper.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/IMapKeyRelation.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/IPlainPropertyContainerMapper.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/CollectionElementRelationCustomizer.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ComponentElementCustomizer.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyComponentCustomizer.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyRelationCustomizer.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/PropertyContainerCustomizer.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Generators.cs trunk/nhibernate/src/NHibernate/Mapping/ByCode/MappingsExtensions.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Address.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Animal.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Classification.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/DomesticAnimal.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Human.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Mammal.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Name.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Reptile.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/StateProvince.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/User.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Zoo.cs trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/ShowXmlDemo.cs Removed Paths: ------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/Generators.cs Copied: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Generators.cs (from rev 5574, trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/Generators.cs) =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Generators.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Generators.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,185 @@ +using System; +using System.Linq.Expressions; +using System.Reflection; + +namespace NHibernate.Mapping.ByCode +{ + public static class Generators + { + static Generators() + { + Native = new NativeGeneratorDef(); + HighLow = new HighLowGeneratorDef(); + Guid = new GuidGeneratorDef(); + GuidComb = new GuidCombGeneratorDef(); + Sequence = new SequenceGeneratorDef(); + Identity = new IdentityGeneratorDef(); + Assigned = new AssignedGeneratorDef(); + } + + public static IGeneratorDef Assigned { get; private set; } + public static IGeneratorDef Native { get; private set; } + public static IGeneratorDef HighLow { get; private set; } + public static IGeneratorDef Guid { get; private set; } + public static IGeneratorDef GuidComb { get; private set; } + public static IGeneratorDef Sequence { get; private set; } + public static IGeneratorDef Identity { get; private set; } + + public static IGeneratorDef Foreign<TEntity>(Expression<Func<TEntity, object>> property) + { + return new ForeignGeneratorDef(TypeExtensions.DecodeMemberAccessExpression(property)); + } + + public static IGeneratorDef Foreign(MemberInfo property) + { + return new ForeignGeneratorDef(property); + } + } + + public class AssignedGeneratorDef : IGeneratorDef + { + #region Implementation of IGeneratorDef + + public string Class + { + get { return "assigned"; } + } + + public object Params + { + get { return null; } + } + + #endregion + } + + public class ForeignGeneratorDef : IGeneratorDef + { + private readonly object param; + + public ForeignGeneratorDef(MemberInfo foreignProperty) + { + if (foreignProperty == null) + { + throw new ArgumentNullException("foreignProperty"); + } + param = new {property = foreignProperty.Name}; + } + + #region Implementation of IGeneratorDef + + public string Class + { + get { return "foreign"; } + } + + public object Params + { + get { return param; } + } + + #endregion + } + + public class NativeGeneratorDef : IGeneratorDef + { + #region Implementation of IGeneratorDef + + public string Class + { + get { return "native"; } + } + + public object Params + { + get { return null; } + } + + #endregion + } + + public class HighLowGeneratorDef : IGeneratorDef + { + #region Implementation of IGeneratorDef + + public string Class + { + get { return "hilo"; } + } + + public object Params + { + get { return null; } + } + + #endregion + } + + public class GuidGeneratorDef : IGeneratorDef + { + #region Implementation of IGeneratorDef + + public string Class + { + get { return "guid"; } + } + + public object Params + { + get { return null; } + } + + #endregion + } + + public class GuidCombGeneratorDef : IGeneratorDef + { + #region Implementation of IGeneratorDef + + public string Class + { + get { return "guid.comb"; } + } + + public object Params + { + get { return null; } + } + + #endregion + } + + public class SequenceGeneratorDef : IGeneratorDef + { + #region Implementation of IGeneratorDef + + public string Class + { + get { return "sequence"; } + } + + public object Params + { + get { return null; } + } + + #endregion + } + + public class IdentityGeneratorDef : IGeneratorDef + { + #region Implementation of IGeneratorDef + + public string Class + { + get { return "identity"; } + } + + public object Params + { + get { return null; } + } + + #endregion + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionElementRelation.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionElementRelation.cs 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionElementRelation.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -12,8 +12,11 @@ public interface ICollectionElementRelation<TElement> { + void Element(); void Element(Action<IElementMapper> mapping); + void OneToMany(); void OneToMany(Action<IOneToManyMapper> mapping); + void ManyToMany(); void ManyToMany(Action<IManyToManyMapper> mapping); void Component(Action<IComponentElementMapper<TElement>> mapping); } Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentElementMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentElementMapper.cs 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentElementMapper.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -16,11 +16,13 @@ public interface IComponentElementMapper<TComponent> : IComponentAttributesMapper<TComponent> { void Property<TProperty>(Expression<Func<TComponent, TProperty>> property, Action<IPropertyMapper> mapping); + void Property<TProperty>(Expression<Func<TComponent, TProperty>> property); void Component<TNestedComponent>(Expression<Func<TComponent, TNestedComponent>> property, Action<IComponentElementMapper<TNestedComponent>> mapping) where TNestedComponent : class; void ManyToOne<TProperty>(Expression<Func<TComponent, TProperty>> property, Action<IManyToOneMapper> mapping) where TProperty : class; + void ManyToOne<TProperty>(Expression<Func<TComponent, TProperty>> property) where TProperty : class; } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapKeyMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapKeyMapper.cs 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapKeyMapper.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -14,6 +14,7 @@ public interface IComponentMapKeyMapper<TComponent> { void Property<TProperty>(Expression<Func<TComponent, TProperty>> property, Action<IPropertyMapper> mapping); + void Property<TProperty>(Expression<Func<TComponent, TProperty>> property); void ManyToOne<TProperty>(Expression<Func<TComponent, TProperty>> property, Action<IManyToOneMapper> mapping) where TProperty : class; } Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IMapKeyRelation.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IMapKeyRelation.cs 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IMapKeyRelation.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -11,7 +11,9 @@ public interface IMapKeyRelation<TKey> { + void Element(); void Element(Action<IMapKeyMapper> mapping); + void ManyToMany(); void ManyToMany(Action<IMapKeyManyToManyMapper> mapping); void Component(Action<IComponentMapKeyMapper<TKey>> mapping); } Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IPlainPropertyContainerMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IPlainPropertyContainerMapper.cs 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IPlainPropertyContainerMapper.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -29,6 +29,8 @@ Action<IComponentMapper<TComponent>> mapping) where TComponent : class; void ManyToOne<TProperty>(Expression<Func<TContainer, TProperty>> property, Action<IManyToOneMapper> mapping) where TProperty : class; + void ManyToOne<TProperty>(Expression<Func<TContainer, TProperty>> property) where TProperty : class; + void OneToOne<TProperty>(Expression<Func<TContainer, TProperty>> property, Action<IOneToOneMapper> mapping) where TProperty : class; void Any<TProperty>(Expression<Func<TContainer, TProperty>> property, System.Type idTypeOfMetaType, Action<IAnyMapper> mapping) where TProperty : class; } Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/CollectionElementRelationCustomizer.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/CollectionElementRelationCustomizer.cs 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/CollectionElementRelationCustomizer.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -21,18 +21,33 @@ #region ICollectionElementRelation<TElement> Members + public void Element() + { + Element(x => { }); + } + public void Element(Action<IElementMapper> mapping) { var collectionElementCustomizer = new CollectionElementCustomizer(propertyPath, customizersHolder); mapping(collectionElementCustomizer); } + public void OneToMany() + { + OneToMany(x => { }); + } + public void OneToMany(Action<IOneToManyMapper> mapping) { var oneToManyCustomizer = new OneToManyCustomizer(explicitDeclarationsHolder, propertyPath, customizersHolder); mapping(oneToManyCustomizer); } + public void ManyToMany() + { + ManyToMany(x => { }); + } + public void ManyToMany(Action<IManyToManyMapper> mapping) { var manyToManyCustomizer = new ManyToManyCustomizer(explicitDeclarationsHolder, propertyPath, customizersHolder); Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ComponentElementCustomizer.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ComponentElementCustomizer.cs 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ComponentElementCustomizer.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -63,6 +63,11 @@ customizersHolder.AddCustomizer(new PropertyPath(propertyPath, memberOf), mapping); } + public void Property<TProperty>(Expression<Func<TComponent, TProperty>> property) + { + Property(property, x => { }); + } + public void Component<TNestedComponent>(Expression<Func<TComponent, TNestedComponent>> property, Action<IComponentElementMapper<TNestedComponent>> mapping) where TNestedComponent : class { @@ -80,6 +85,11 @@ customizersHolder.AddCustomizer(new PropertyPath(propertyPath, memberOf), mapping); } + public void ManyToOne<TProperty>(Expression<Func<TComponent, TProperty>> property) where TProperty : class + { + ManyToOne(property, x => { }); + } + public void Access(Accessor accessor) { customizersHolder.AddCustomizer(typeof (TComponent), (IComponentAttributesMapper x) => x.Access(accessor)); Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyComponentCustomizer.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyComponentCustomizer.cs 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyComponentCustomizer.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -23,6 +23,11 @@ customizersHolder.AddCustomizer(new PropertyPath(propertyPath, member), mapping); } + public void Property<TProperty>(Expression<Func<TKey, TProperty>> property) + { + Property(property, x => { }); + } + public void ManyToOne<TProperty>(Expression<Func<TKey, TProperty>> property, Action<IManyToOneMapper> mapping) where TProperty : class { MemberInfo member = TypeExtensions.DecodeMemberAccessExpression(property); Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyRelationCustomizer.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyRelationCustomizer.cs 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyRelationCustomizer.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -21,12 +21,22 @@ #region IMapKeyRelation<TKey> Members + public void Element() + { + Element(x => { }); + } + public void Element(Action<IMapKeyMapper> mapping) { var mapKeyCustomizer = new MapKeyCustomizer(propertyPath, customizersHolder); mapping(mapKeyCustomizer); } + public void ManyToMany() + { + ManyToMany(x => { }); + } + public void ManyToMany(Action<IMapKeyManyToManyMapper> mapping) { var manyToManyCustomizer = new MapKeyManyToManyCustomizer(explicitDeclarationsHolder, propertyPath, customizersHolder); Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/PropertyContainerCustomizer.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/PropertyContainerCustomizer.cs 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/PropertyContainerCustomizer.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -64,6 +64,11 @@ explicitDeclarationsHolder.AddAsManyToOneRelation(memberOf); } + public void ManyToOne<TProperty>(Expression<Func<TEntity, TProperty>> property) where TProperty : class + { + ManyToOne(property, x => { }); + } + public void OneToOne<TProperty>(Expression<Func<TEntity, TProperty>> property, Action<IOneToOneMapper> mapping) where TProperty : class { Deleted: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/Generators.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/Generators.cs 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/Generators.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -1,185 +0,0 @@ -using System; -using System.Linq.Expressions; -using System.Reflection; - -namespace NHibernate.Mapping.ByCode.Impl -{ - public static class Generators - { - static Generators() - { - Native = new NativeGeneratorDef(); - HighLow = new HighLowGeneratorDef(); - Guid = new GuidGeneratorDef(); - GuidComb = new GuidCombGeneratorDef(); - Sequence = new SequenceGeneratorDef(); - Identity = new IdentityGeneratorDef(); - Assigned = new AssignedGeneratorDef(); - } - - public static IGeneratorDef Assigned { get; private set; } - public static IGeneratorDef Native { get; private set; } - public static IGeneratorDef HighLow { get; private set; } - public static IGeneratorDef Guid { get; private set; } - public static IGeneratorDef GuidComb { get; private set; } - public static IGeneratorDef Sequence { get; private set; } - public static IGeneratorDef Identity { get; private set; } - - public static IGeneratorDef Foreign<TEntity>(Expression<Func<TEntity, object>> property) - { - return new ForeignGeneratorDef(TypeExtensions.DecodeMemberAccessExpression(property)); - } - - public static IGeneratorDef Foreign(MemberInfo property) - { - return new ForeignGeneratorDef(property); - } - } - - public class AssignedGeneratorDef : IGeneratorDef - { - #region Implementation of IGeneratorDef - - public string Class - { - get { return "assigned"; } - } - - public object Params - { - get { return null; } - } - - #endregion - } - - public class ForeignGeneratorDef : IGeneratorDef - { - private readonly object param; - - public ForeignGeneratorDef(MemberInfo foreignProperty) - { - if (foreignProperty == null) - { - throw new ArgumentNullException("foreignProperty"); - } - param = new {property = foreignProperty.Name}; - } - - #region Implementation of IGeneratorDef - - public string Class - { - get { return "foreign"; } - } - - public object Params - { - get { return param; } - } - - #endregion - } - - public class NativeGeneratorDef : IGeneratorDef - { - #region Implementation of IGeneratorDef - - public string Class - { - get { return "native"; } - } - - public object Params - { - get { return null; } - } - - #endregion - } - - public class HighLowGeneratorDef : IGeneratorDef - { - #region Implementation of IGeneratorDef - - public string Class - { - get { return "hilo"; } - } - - public object Params - { - get { return null; } - } - - #endregion - } - - public class GuidGeneratorDef : IGeneratorDef - { - #region Implementation of IGeneratorDef - - public string Class - { - get { return "guid"; } - } - - public object Params - { - get { return null; } - } - - #endregion - } - - public class GuidCombGeneratorDef : IGeneratorDef - { - #region Implementation of IGeneratorDef - - public string Class - { - get { return "guid.comb"; } - } - - public object Params - { - get { return null; } - } - - #endregion - } - - public class SequenceGeneratorDef : IGeneratorDef - { - #region Implementation of IGeneratorDef - - public string Class - { - get { return "sequence"; } - } - - public object Params - { - get { return null; } - } - - #endregion - } - - public class IdentityGeneratorDef : IGeneratorDef - { - #region Implementation of IGeneratorDef - - public string Class - { - get { return "identity"; } - } - - public object Params - { - get { return null; } - } - - #endregion - } -} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/MappingsExtensions.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/MappingsExtensions.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/MappingsExtensions.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml; +using System.Xml.Serialization; +using NHibernate.Cfg.MappingSchema; + +namespace NHibernate.Mapping.ByCode +{ + /// <summary> + /// Util extensions to use in your test or where you need to see the XML mappings + /// </summary> + public static class MappingsExtensions + { + public static void WriteAllXmlMapping(this IEnumerable<HbmMapping> mappings) + { + if (mappings == null) + { + throw new ArgumentNullException("mappings"); + } + string mappingsFolderPath = ArrangeMappingsFolderPath(); + foreach (HbmMapping hbmMapping in mappings) + { + string fileName = GetFileName(hbmMapping); + string document = Serialize(hbmMapping); + File.WriteAllText(Path.Combine(mappingsFolderPath, fileName), document); + } + } + + public static string AsString(this HbmMapping mappings) + { + if (mappings == null) + { + throw new ArgumentNullException("mappings"); + } + return Serialize(mappings); + } + + private static string ArrangeMappingsFolderPath() + { + string baseDir = AppDomain.CurrentDomain.BaseDirectory; + string relativeSearchPath = AppDomain.CurrentDomain.RelativeSearchPath; + string binPath = relativeSearchPath != null ? Path.Combine(baseDir, relativeSearchPath): baseDir; + string mappingsFolderPath = Path.Combine(binPath, "Mappings"); + + if (!Directory.Exists(mappingsFolderPath)) + { + Directory.CreateDirectory(mappingsFolderPath); + } + else + { + System.Array.ForEach(Directory.GetFiles(mappingsFolderPath), File.Delete); + } + return mappingsFolderPath; + } + + private static string GetFileName(HbmMapping hbmMapping) + { + string name = "MyMapping"; + HbmClass rc = hbmMapping.RootClasses.FirstOrDefault(); + if (rc != null) + { + name = rc.Name; + } + HbmSubclass sc = hbmMapping.SubClasses.FirstOrDefault(); + if (sc != null) + { + name = sc.Name; + } + HbmJoinedSubclass jc = hbmMapping.JoinedSubclasses.FirstOrDefault(); + if (jc != null) + { + name = jc.Name; + } + HbmUnionSubclass uc = hbmMapping.UnionSubclasses.FirstOrDefault(); + if (uc != null) + { + name = uc.Name; + } + return name + ".hbm.xml"; + } + + private static string Serialize(HbmMapping hbmElement) + { + string result; + var setting = new XmlWriterSettings { Indent = true }; + var serializer = new XmlSerializer(typeof(HbmMapping)); + using (var memStream = new MemoryStream(2048)) + { + using (XmlWriter xmlWriter = XmlWriter.Create(memStream, setting)) + { + serializer.Serialize(xmlWriter, hbmElement); + } + memStream.Position = 0; + using (var sr = new StreamReader(memStream)) + { + result = sr.ReadToEnd(); + } + } + return result; + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-04-02 23:00:42 UTC (rev 5586) @@ -363,7 +363,7 @@ <Compile Include="Mapping\ByCode\Impl\ElementMapper.cs" /> <Compile Include="Mapping\ByCode\Impl\FilterMapper.cs" /> <Compile Include="Mapping\ByCode\Impl\GeneratorMapper.cs" /> - <Compile Include="Mapping\ByCode\Impl\Generators.cs" /> + <Compile Include="Mapping\ByCode\Generators.cs" /> <Compile Include="Mapping\ByCode\Impl\ICandidatePersistentMembersProvider.cs" /> <Compile Include="Mapping\ByCode\Impl\ICustomizersHolder.cs" /> <Compile Include="Mapping\ByCode\Impl\IdMapper.cs" /> @@ -404,6 +404,7 @@ <Compile Include="Mapping\ByCode\IVersionMapper.cs" /> <Compile Include="Mapping\ByCode\Lazy.cs" /> <Compile Include="Mapping\ByCode\ModelMapper.cs" /> + <Compile Include="Mapping\ByCode\MappingsExtensions.cs" /> <Compile Include="Mapping\ByCode\NotFoundMode.cs" /> <Compile Include="Mapping\ByCode\SchemaAction.cs" /> <Compile Include="Mapping\ByCode\TypeExtensions.cs" /> Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Address.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Address.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Address.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,15 @@ +namespace NHibernate.Test.MappingByCode.NatureDemo.Naturalness +{ + public class Address + { + public string Street { get; set; } + + public string City { get; set; } + + public string PostalCode { get; set; } + + public string Country { get; set; } + + public StateProvince StateProvince { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Animal.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Animal.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Animal.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,33 @@ +using Iesi.Collections.Generic; + +namespace NHibernate.Test.MappingByCode.NatureDemo.Naturalness +{ + public class Animal + { + public virtual long Id { get; set; } + + public virtual float BodyWeight { get; set; } + + public virtual ISet<Animal> Offspring { get; set; } + + public virtual Animal Mother { get; set; } + + public virtual Animal Father { get; set; } + + public virtual string Description { get; set; } + + public virtual Zoo Zoo { get; set; } + + public virtual string SerialNumber { get; set; } + + public virtual void AddOffspring(Animal offSpring) + { + if (Offspring == null) + { + Offspring = new HashedSet<Animal>(); + } + + Offspring.Add(offSpring); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Classification.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Classification.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Classification.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,8 @@ +namespace NHibernate.Test.MappingByCode.NatureDemo.Naturalness +{ + public enum Classification + { + Cool = 0, + Lame = 1 + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/DomesticAnimal.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/DomesticAnimal.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/DomesticAnimal.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,10 @@ +namespace NHibernate.Test.MappingByCode.NatureDemo.Naturalness +{ + public class DomesticAnimal: Mammal + { + public virtual Human Owner { get; set; } + } + + public class Cat : DomesticAnimal { } + public class Dog : DomesticAnimal { } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Human.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Human.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Human.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using Iesi.Collections.Generic; + +namespace NHibernate.Test.MappingByCode.NatureDemo.Naturalness +{ + public class Human : Mammal + { + public virtual Name Name { get; set; } + + public virtual string NickName { get; set; } + + public virtual ICollection<Human> Friends { get; set; } + + public virtual ICollection<DomesticAnimal> Pets { get; set; } + + public virtual IDictionary<string, Human> Family { get; set; } + + public virtual double Height { get; set; } + + public virtual long BigIntegerValue { get; set; } + + public virtual decimal BigDecimalValue { get; set; } + + public virtual int IntValue { get; set; } + + public virtual float FloatValue { get; set; } + + public virtual ISet<string> NickNames { get; set; } + + public virtual IDictionary<string, Address> Addresses { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Mammal.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Mammal.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Mammal.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,16 @@ +using System; + +namespace NHibernate.Test.MappingByCode.NatureDemo.Naturalness +{ + public class Mammal : Animal + { + public Mammal() + { + Birthdate = DateTime.Today; + } + + public virtual bool Pregnant { get; set; } + + public virtual DateTime Birthdate { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Name.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Name.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Name.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,11 @@ +namespace NHibernate.Test.MappingByCode.NatureDemo.Naturalness +{ + public class Name + { + public string First { get; set; } + + public char Initial { get; set; } + + public string Last { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Reptile.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Reptile.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Reptile.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,9 @@ +namespace NHibernate.Test.MappingByCode.NatureDemo.Naturalness +{ + public class Reptile : Animal + { + public virtual float BodyTemperature { get; set; } + } + + public class Lizard : Reptile {} +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/StateProvince.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/StateProvince.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/StateProvince.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,11 @@ +namespace NHibernate.Test.MappingByCode.NatureDemo.Naturalness +{ + public class StateProvince + { + public virtual long Id { get; set; } + + public virtual string Name { get; set; } + + public virtual string IsoCode { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/User.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/User.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/User.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace NHibernate.Test.MappingByCode.NatureDemo.Naturalness +{ + public class User + { + public virtual long Id { get; set; } + + public virtual string UserName { get; set; } + + public virtual Human Human { get; set; } + + public virtual IList<string> Permissions { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Zoo.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Zoo.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/Naturalness/Zoo.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,21 @@ +using System.Collections.Generic; + +namespace NHibernate.Test.MappingByCode.NatureDemo.Naturalness +{ + public class Zoo + { + public virtual long Id { get; set; } + + public virtual string Name { get; set; } + + public virtual Classification Classification { get; set; } + + public virtual IDictionary<string, Animal> Animals { get; set; } + + public virtual IDictionary<string, Mammal> Mammals { get; set; } + + public virtual Address Address { get; set; } + } + + public class PettingZoo : Zoo {} +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/ShowXmlDemo.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/ShowXmlDemo.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/NatureDemo/ShowXmlDemo.cs 2011-04-02 23:00:42 UTC (rev 5586) @@ -0,0 +1,124 @@ +using System; +using System.Linq; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode; +using NHibernate.Test.MappingByCode.NatureDemo.Naturalness; +using NUnit.Framework; + +namespace NHibernate.Test.MappingByCode.NatureDemo +{ + public class ShowXmlDemo + { + [Test, Explicit] + public void MappingAndShowXmlInConsole() + { + Console.Write(GetMapping().AsString()); + } + + public static HbmMapping GetMapping() + { + var mapper = new ModelMapper(); + + mapper.Class<Animal>(rc=> + { + rc.Id(x => x.Id, map => map.Generator(Generators.Native)); + + rc.Property(animal => animal.Description); + rc.Property(animal => animal.BodyWeight); + rc.ManyToOne(animal => animal.Mother); + rc.ManyToOne(animal => animal.Father); + rc.ManyToOne(animal => animal.Zoo); + rc.Property(animal => animal.SerialNumber); + rc.Set(animal => animal.Offspring, cm => cm.OrderBy(an => an.Father), rel => rel.OneToMany()); + }); + + mapper.JoinedSubclass<Reptile>(jsc => { jsc.Property(reptile => reptile.BodyTemperature); }); + + mapper.JoinedSubclass<Lizard>(jsc => { }); + + mapper.JoinedSubclass<Mammal>(jsc => + { + jsc.Property(mammal => mammal.Pregnant); + jsc.Property(mammal => mammal.Birthdate); + }); + + mapper.JoinedSubclass<DomesticAnimal>(jsc => + { + jsc.ManyToOne(domesticAnimal => domesticAnimal.Owner); + }); + + mapper.JoinedSubclass<Cat>(jsc => { }); + + mapper.JoinedSubclass<Dog>(jsc => { }); + + mapper.JoinedSubclass<Human>(jsc => + { + jsc.Component(human => human.Name, comp => + { + comp.Property(name => name.First); + comp.Property(name => name.Initial); + comp.Property(name => name.Last); + }); + jsc.Property(human => human.NickName); + jsc.Property(human => human.Height); + jsc.Property(human => human.IntValue); + jsc.Property(human => human.FloatValue); + jsc.Property(human => human.BigDecimalValue); + jsc.Property(human => human.BigIntegerValue); + jsc.Bag(human => human.Friends, cm => { }, rel => rel.ManyToMany()); + jsc.Map(human => human.Family, cm => { }, km=> { }, rel => rel.ManyToMany()); + jsc.Bag(human => human.Pets, cm => { cm.Inverse(true); }, rel => rel.OneToMany()); + jsc.Set(human => human.NickNames, cm => + { + cm.Lazy(CollectionLazy.NoLazy); + cm.Sort(); + }, cer => { }); + jsc.Map(human => human.Addresses, cm => { }, mk => { }, rel => rel.Component(comp => + { + comp.Property(address => address.Street); + comp.Property(address => address.City); + comp.Property(address => address.PostalCode); + comp.Property(address => address.Country); + comp.ManyToOne(address => address.StateProvince); + })); + }); + + mapper.Class<User>(rc => + { + rc.Id(u => u.Id, im => im.Generator(Generators.Foreign<User>(u => u.Human))); + + rc.Property(user => user.UserName); + rc.OneToOne(user => user.Human, rm => rm.Constrained(true)); + rc.List(user => user.Permissions, cm => { }, cer => { }); + }); + + mapper.Class<Zoo>(rc => + { + rc.Id(x => x.Id, map => map.Generator(Generators.Native)); + rc.Property(zoo => zoo.Name); + rc.Property(zoo => zoo.Classification); + rc.Map(zoo => zoo.Mammals, cm => { }, km => { km.Element(); }, rel => rel.OneToMany()); + rc.Map(zoo => zoo.Animals, cm => { cm.Inverse(true); }, km => { km.Element(); }, rel => rel.OneToMany()); + rc.Component(zoo => zoo.Address, comp => + { + comp.Property(address => address.Street); + comp.Property(address => address.City); + comp.Property(address => address.PostalCode); + comp.Property(address => address.Country); + comp.ManyToOne(address => address.StateProvince); + }); + }); + + mapper.Subclass<PettingZoo>(sc => { }); + + mapper.Class<StateProvince>(rc => + { + rc.Id(x => x.Id, map => map.Generator(Generators.Native)); + rc.Property(sp => sp.Name); + rc.Property(sp => sp.IsoCode); + }); + return mapper.CompileMappingFor(typeof (Animal).Assembly.GetTypes().Where(t => t.Namespace == typeof (Animal).Namespace)); + } + + } +} \ 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-02 21:26:20 UTC (rev 5585) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 23:00:42 UTC (rev 5586) @@ -519,6 +519,18 @@ <Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\UnionSubclassMappingStrategyTests.cs" /> <Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\UnionSubclassSequenceRegistrationTests.cs" /> <Compile Include="MappingByCode\MappingOfPrivateMembersOnRootEntity.cs" /> + <Compile Include="MappingByCode\NatureDemo\Naturalness\Address.cs" /> + <Compile Include="MappingByCode\NatureDemo\Naturalness\Animal.cs" /> + <Compile Include="MappingByCode\NatureDemo\Naturalness\Classification.cs" /> + <Compile Include="MappingByCode\NatureDemo\Naturalness\DomesticAnimal.cs" /> + <Compile Include="MappingByCode\NatureDemo\Naturalness\Human.cs" /> + <Compile Include="MappingByCode\NatureDemo\Naturalness\Mammal.cs" /> + <Compile Include="MappingByCode\NatureDemo\Naturalness\Name.cs" /> + <Compile Include="MappingByCode\NatureDemo\Naturalness\Reptile.cs" /> + <Compile Include="MappingByCode\NatureDemo\ShowXmlDemo.cs" /> + <Compile Include="MappingByCode\NatureDemo\Naturalness\StateProvince.cs" /> + <Compile Include="MappingByCode\NatureDemo\Naturalness\User.cs" /> + <Compile Include="MappingByCode\NatureDemo\Naturalness\Zoo.cs" /> <Compile Include="NHSpecificTest\AccessAndCorrectPropertyName\Fixture.cs" /> <Compile Include="NHSpecificTest\AccessAndCorrectPropertyName\Model.cs" /> <Compile Include="NHSpecificTest\BagWithLazyExtraAndFilter\Domain.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |