|
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.
|