|
From: <te...@us...> - 2009-03-10 22:43:24
|
Revision: 4122
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4122&view=rev
Author: tehlike
Date: 2009-03-10 22:43:13 +0000 (Tue, 10 Mar 2009)
Log Message:
-----------
Making Configuration Serializable.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/AdoNet/Expectations.cs
trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs
trunk/nhibernate/src/NHibernate/Cfg/DefaultNamingStrategy.cs
trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs
trunk/nhibernate/src/NHibernate/Engine/ExecuteUpdateResultCheckStyle.cs
trunk/nhibernate/src/NHibernate/Engine/Query/Sql/NativeSQLQueryScalarReturn.cs
trunk/nhibernate/src/NHibernate/Engine/ResultSetMappingDefinition.cs
trunk/nhibernate/src/NHibernate/EntityModeEqualityComparer.cs
trunk/nhibernate/src/NHibernate/Event/Default/DefaultMergeEventListener.cs
trunk/nhibernate/src/NHibernate/Loader/JoinWalker.cs
trunk/nhibernate/src/NHibernate/LockMode.cs
trunk/nhibernate/src/NHibernate/Properties/BasicPropertyAccessor.cs
trunk/nhibernate/src/NHibernate/Properties/FieldAccessor.cs
trunk/nhibernate/src/NHibernate/Properties/MapAccessor.cs
trunk/nhibernate/src/NHibernate/Properties/PropertyAccessorFactory.cs
trunk/nhibernate/src/NHibernate/Tuple/Component/PocoComponentTuplizer.cs
trunk/nhibernate/src/NHibernate/Tuple/Entity/PocoEntityTuplizer.cs
trunk/nhibernate/src/NHibernate/Type/AbstractType.cs
trunk/nhibernate/src/NHibernate/Type/ForeignKeyDirection.cs
trunk/nhibernate/src/NHibernate/Type/OneToOneType.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/CfgTest/ConfigurationSerializationTests.cs
trunk/nhibernate/src/NHibernate.Test/EngineTest/NativeSqlQueryReturnTest.cs
Modified: trunk/nhibernate/src/NHibernate/AdoNet/Expectations.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/AdoNet/Expectations.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/AdoNet/Expectations.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -81,11 +81,11 @@
public static IExpectation AppropriateExpectation(ExecuteUpdateResultCheckStyle style)
{
- if (style == ExecuteUpdateResultCheckStyle.None)
+ if (style.Equals(ExecuteUpdateResultCheckStyle.None))
{
return None;
}
- else if (style == ExecuteUpdateResultCheckStyle.Count)
+ else if (style.Equals(ExecuteUpdateResultCheckStyle.Count))
{
return Basic;
}
Modified: trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -26,6 +26,7 @@
using NHibernate.Type;
using NHibernate.Util;
using Array=System.Array;
+using System.Runtime.Serialization;
namespace NHibernate.Cfg
{
@@ -44,7 +45,8 @@
/// is immutable and does not retain any association back to the <see cref="Configuration" />
/// </para>
/// </remarks>
- public class Configuration
+ [Serializable]
+ public class Configuration:ISerializable
{
/// <summary>The XML Namespace for the nhibernate-mapping</summary>
public const string MappingSchemaXMLNS = "urn:nhibernate-mapping-2.2";
@@ -74,8 +76,89 @@
private static readonly ILog log = LogManager.GetLogger(typeof (Configuration));
+
protected internal SettingsFactory settingsFactory;
+ #region ISerializable Members
+ public Configuration(SerializationInfo info, StreamingContext context)
+ {
+ this.Reset();
+
+ this.EntityNotFoundDelegate = GetSerialedObject<IEntityNotFoundDelegate>(info, "entityNotFoundDelegate");
+
+
+ this.auxiliaryDatabaseObjects = GetSerialedObject<IList<IAuxiliaryDatabaseObject>>(info, "auxiliaryDatabaseObjects");
+ this.classes = GetSerialedObject<IDictionary<string, PersistentClass>>(info, "classes");
+ this.collections = GetSerialedObject<IDictionary<string, NHibernate.Mapping.Collection>>(info, "collections");
+
+ this.columnNameBindingPerTable = GetSerialedObject<IDictionary<Table, Mappings.ColumnNames>>(info,
+ "columnNameBindingPerTable");
+ this.defaultAssembly = GetSerialedObject<string>(info, "defaultAssembly");
+ this.defaultNamespace = GetSerialedObject<string>(info, "defaultNamespace");
+ this.eventListeners = GetSerialedObject<EventListeners>(info, "eventListeners");
+ //this.extendsQueue = GetSerialedObject<ISet<ExtendsQueueEntry>>(info, "extendsQueue");
+ this.FilterDefinitions = GetSerialedObject<IDictionary<string, FilterDefinition>>(info, "filterDefinitions");
+ this.Imports = GetSerialedObject<IDictionary<string, string>>(info, "imports");
+ this.interceptor = GetSerialedObject<IInterceptor>(info, "interceptor");
+ this.mapping = GetSerialedObject<IMapping>(info, "mapping");
+ this.NamedQueries = GetSerialedObject<IDictionary<string, NamedQueryDefinition>>(info, "namedQueries");
+ this.NamedSQLQueries = GetSerialedObject<IDictionary<string, NamedSQLQueryDefinition>>(info, "namedSqlQueries");
+ this.namingStrategy = GetSerialedObject<INamingStrategy>(info, "namingStrategy");
+ this.properties = GetSerialedObject<IDictionary<string, string>>(info, "properties");
+ this.propertyReferences = GetSerialedObject<IList<Mappings.PropertyReference>>(info, "propertyReferences");
+ this.settingsFactory = GetSerialedObject<SettingsFactory>(info, "settingsFactory");
+ this.SqlFunctions = GetSerialedObject<IDictionary<string, ISQLFunction>>(info, "sqlFunctions");
+ this.SqlResultSetMappings = GetSerialedObject<IDictionary<string, ResultSetMappingDefinition>>(info, "sqlResultSetMappings");
+ this.tableNameBinding = GetSerialedObject<IDictionary<string, Mappings.TableDescription>>(info, "tableNameBinding");
+ this.tables = GetSerialedObject<IDictionary<string, Table>>(info, "tables");
+ this.typeDefs = GetSerialedObject<IDictionary<string, TypeDef>>(info, "typeDefs");
+
+
+
+
+
+
+ }
+ private T GetSerialedObject<T>(SerializationInfo info, string name)
+ {
+ return (T)info.GetValue(name, typeof(T));
+ }
+ public void GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ ConfigureProxyFactoryFactory();
+ SecondPassCompile();
+ Validate();
+
+
+ info.AddValue("entityNotFoundDelegate", this.EntityNotFoundDelegate);
+
+
+ info.AddValue("auxiliaryDatabaseObjects", this.auxiliaryDatabaseObjects);
+ info.AddValue("classes", this.classes);
+ info.AddValue("collections", this.collections);
+ info.AddValue("columnNameBindingPerTable", this.columnNameBindingPerTable);
+ info.AddValue("defaultAssembly", this.defaultAssembly);
+ info.AddValue("defaultNamespace", this.defaultNamespace);
+ info.AddValue("eventListeners", this.eventListeners);
+ //info.AddValue("extendsQueue", this.extendsQueue);
+ info.AddValue("filterDefinitions", this.FilterDefinitions);
+ info.AddValue("imports", this.Imports);
+ info.AddValue("interceptor", this.interceptor);
+ info.AddValue("mapping", this.mapping);
+ info.AddValue("namedQueries", this.NamedQueries);
+ info.AddValue("namedSqlQueries", this.NamedSQLQueries);
+ info.AddValue("namingStrategy", this.namingStrategy);
+ info.AddValue("properties", this.properties);
+ info.AddValue("propertyReferences", this.propertyReferences);
+ info.AddValue("settingsFactory", this.settingsFactory);
+ info.AddValue("sqlFunctions", this.SqlFunctions);
+ info.AddValue("sqlResultSetMappings", this.SqlResultSetMappings);
+ info.AddValue("tableNameBinding", this.tableNameBinding);
+ info.AddValue("tables", this.tables);
+ info.AddValue("typeDefs", this.typeDefs);
+ }
+ #endregion
+
/// <summary>
/// Clear the internal state of the <see cref="Configuration"/> object.
/// </summary>
@@ -101,8 +184,9 @@
extendsQueue = new HashedSet<ExtendsQueueEntry>();
tableNameBinding = new Dictionary<string, Mappings.TableDescription>();
columnNameBindingPerTable = new Dictionary<Table, Mappings.ColumnNames>();
+
}
-
+ [Serializable]
private class Mapping : IMapping
{
private readonly Configuration configuration;
@@ -155,7 +239,7 @@
}
}
- [NonSerialized] private IMapping mapping;
+ private IMapping mapping;
protected Configuration(SettingsFactory settingsFactory)
{
@@ -969,13 +1053,7 @@
private string defaultAssembly;
private string defaultNamespace;
- /// <summary>
- /// Instantiate a new <see cref="ISessionFactory" />, using the properties and mappings in this
- /// configuration. The <see cref="ISessionFactory" /> will be immutable, so changes made to the
- /// configuration after building the <see cref="ISessionFactory" /> will not affect it.
- /// </summary>
- /// <returns>An <see cref="ISessionFactory" /> instance.</returns>
- public ISessionFactory BuildSessionFactory()
+ protected virtual void ConfigureProxyFactoryFactory()
{
#region Way for the user to specify their own ProxyFactory
@@ -990,7 +1068,17 @@
}
#endregion
+ }
+ /// <summary>
+ /// Instantiate a new <see cref="ISessionFactory" />, using the properties and mappings in this
+ /// configuration. The <see cref="ISessionFactory" /> will be immutable, so changes made to the
+ /// configuration after building the <see cref="ISessionFactory" /> will not affect it.
+ /// </summary>
+ /// <returns>An <see cref="ISessionFactory" /> instance.</returns>
+ public ISessionFactory BuildSessionFactory()
+ {
+ ConfigureProxyFactoryFactory();
SecondPassCompile();
Validate();
Environment.VerifyProperties(properties);
@@ -2056,5 +2144,7 @@
return generators.Values;
}
+
+
}
}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Cfg/DefaultNamingStrategy.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/DefaultNamingStrategy.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Cfg/DefaultNamingStrategy.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -1,4 +1,5 @@
using NHibernate.Util;
+using System;
namespace NHibernate.Cfg
{
@@ -6,6 +7,7 @@
/// The default <cref name="INamingStrategy"/>
/// </summary>
/// <remarks>See <cref name="ImprovedNamingStrategy"/> for a better alternative</remarks>
+ [Serializable]
public class DefaultNamingStrategy : INamingStrategy
{
/// <summary>
Modified: trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -17,6 +17,7 @@
/// <summary>
/// Reads configuration properties and configures a <see cref="Settings"/> instance.
/// </summary>
+ [Serializable]
public sealed class SettingsFactory
{
private static readonly ILog log = LogManager.GetLogger(typeof(SettingsFactory));
Modified: trunk/nhibernate/src/NHibernate/Engine/ExecuteUpdateResultCheckStyle.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Engine/ExecuteUpdateResultCheckStyle.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Engine/ExecuteUpdateResultCheckStyle.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -1,5 +1,6 @@
using System;
using NHibernate.SqlCommand;
+using System.Runtime.Serialization;
namespace NHibernate.Engine
{
@@ -44,7 +45,6 @@
}
return false;
}
-
public override int GetHashCode()
{
return name.GetHashCode();
Modified: trunk/nhibernate/src/NHibernate/Engine/Query/Sql/NativeSQLQueryScalarReturn.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Engine/Query/Sql/NativeSQLQueryScalarReturn.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Engine/Query/Sql/NativeSQLQueryScalarReturn.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -4,6 +4,7 @@
namespace NHibernate.Engine.Query.Sql
{
/// <summary> Describes a scalar return in a native SQL query. </summary>
+ [Serializable]
public class NativeSQLQueryScalarReturn : INativeSQLQueryReturn
{
private readonly string columnAlias;
Modified: trunk/nhibernate/src/NHibernate/Engine/ResultSetMappingDefinition.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Engine/ResultSetMappingDefinition.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Engine/ResultSetMappingDefinition.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -1,9 +1,11 @@
using System.Collections.Generic;
using NHibernate.Engine.Query.Sql;
+using System;
namespace NHibernate.Engine
{
+ [Serializable]
public class ResultSetMappingDefinition
{
private readonly string name;
Modified: trunk/nhibernate/src/NHibernate/EntityModeEqualityComparer.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/EntityModeEqualityComparer.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/EntityModeEqualityComparer.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -1,7 +1,9 @@
using System.Collections.Generic;
+using System;
namespace NHibernate
{
+ [Serializable]
public class EntityModeEqualityComparer : IEqualityComparer<EntityMode>
{
public bool Equals(EntityMode x, EntityMode y)
Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultMergeEventListener.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Event/Default/DefaultMergeEventListener.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultMergeEventListener.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -341,7 +341,7 @@
{
object[] copiedValues;
- if (foreignKeyDirection == ForeignKeyDirection.ForeignKeyToParent)
+ if (foreignKeyDirection.Equals( ForeignKeyDirection.ForeignKeyToParent))
{
// this is the second pass through on a merge op, so here we limit the
// replacement to associations types (value types were already replaced
Modified: trunk/nhibernate/src/NHibernate/Loader/JoinWalker.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Loader/JoinWalker.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Loader/JoinWalker.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -464,7 +464,7 @@
string foreignKeyTable;
string[] foreignKeyColumns;
- if (type.ForeignKeyDirection == ForeignKeyDirection.ForeignKeyFromParent)
+ if (type.ForeignKeyDirection.Equals(ForeignKeyDirection.ForeignKeyFromParent))
{
foreignKeyTable = lhsTable;
foreignKeyColumns = lhsColumnNames;
Modified: trunk/nhibernate/src/NHibernate/LockMode.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/LockMode.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/LockMode.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -101,6 +101,15 @@
/// </summary>
public static readonly LockMode Force = new LockMode(15, "Force");
+ public override bool Equals(object obj)
+ {
+ LockMode lm = obj as LockMode;
+ if(lm!=null)
+ {
+ return (lm.level == this.level) && (lm.name == this.name);
+ }
+ return base.Equals(obj);
+ }
//TODO: need to implement .NET equivalent of readResolve - believe it is
// the IObjectReference interface...
Modified: trunk/nhibernate/src/NHibernate/Properties/BasicPropertyAccessor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Properties/BasicPropertyAccessor.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Properties/BasicPropertyAccessor.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -160,6 +160,7 @@
/// <summary>
/// An <see cref="IGetter"/> for a Property <c>get</c>.
/// </summary>
+ [Serializable]
public sealed class BasicGetter : IGetter, IOptimizableGetter
{
private readonly System.Type clazz;
@@ -255,6 +256,7 @@
/// <summary>
/// An <see cref="ISetter"/> for a Property <c>set</c>.
/// </summary>
+ [Serializable]
public sealed class BasicSetter : ISetter, IOptimizableSetter
{
private readonly System.Type clazz;
Modified: trunk/nhibernate/src/NHibernate/Properties/FieldAccessor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Properties/FieldAccessor.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Properties/FieldAccessor.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -151,6 +151,7 @@
/// <summary>
/// An <see cref="IGetter"/> that uses a Field instead of the Property <c>get</c>.
/// </summary>
+ [Serializable]
public sealed class FieldGetter : IGetter, IOptimizableGetter
{
private readonly FieldInfo field;
@@ -234,6 +235,7 @@
/// <summary>
/// An <see cref="IGetter"/> that uses a Field instead of the Property <c>set</c>.
/// </summary>
+ [Serializable]
public sealed class FieldSetter : ISetter, IOptimizableSetter
{
private readonly FieldInfo field;
Modified: trunk/nhibernate/src/NHibernate/Properties/MapAccessor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Properties/MapAccessor.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Properties/MapAccessor.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -1,7 +1,7 @@
using System.Collections;
using System.Reflection;
using NHibernate.Engine;
-
+using System;
namespace NHibernate.Properties
{
public class MapAccessor : IPropertyAccessor
@@ -24,7 +24,7 @@
}
#endregion
-
+ [Serializable]
public sealed class MapSetter : ISetter
{
private readonly string name;
@@ -49,7 +49,7 @@
((IDictionary)target)[name] = value;
}
}
-
+ [Serializable]
public sealed class MapGetter : IGetter
{
private readonly string name;
Modified: trunk/nhibernate/src/NHibernate/Properties/PropertyAccessorFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Properties/PropertyAccessorFactory.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Properties/PropertyAccessorFactory.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -273,7 +273,7 @@
throw new MappingException("could not instantiate PropertyAccessor class: " + accessorName, e);
}
}
-
+ [NonSerialized]
private static readonly IPropertyAccessor MapAccessor = new MapAccessor();
public static IPropertyAccessor DynamicMapPropertyAccessor
{
Modified: trunk/nhibernate/src/NHibernate/Tuple/Component/PocoComponentTuplizer.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Tuple/Component/PocoComponentTuplizer.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Tuple/Component/PocoComponentTuplizer.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -4,6 +4,8 @@
namespace NHibernate.Tuple.Component
{
+ using System.Runtime.Serialization;
+
/// <summary>
/// A <see cref="IComponentTuplizer"/> specific to the POCO entity mode.
/// </summary>
@@ -13,8 +15,15 @@
private readonly System.Type componentClass;
private readonly ISetter parentSetter;
private readonly IGetter parentGetter;
- private readonly IReflectionOptimizer optimizer;
+ [NonSerialized]
+ private IReflectionOptimizer optimizer;
+
+ [OnDeserialized]
+ internal void OnDeserialized(StreamingContext context)
+ {
+ this.optimizer = Cfg.Environment.BytecodeProvider.GetReflectionOptimizer(componentClass, getters, setters);
+ }
public PocoComponentTuplizer(Mapping.Component component) : base(component)
{
componentClass = component.ComponentClass;
Modified: trunk/nhibernate/src/NHibernate/Tuple/Entity/PocoEntityTuplizer.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Tuple/Entity/PocoEntityTuplizer.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Tuple/Entity/PocoEntityTuplizer.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -11,9 +11,11 @@
using NHibernate.Proxy;
using NHibernate.Type;
using NHibernate.Util;
+using System.Runtime.Serialization;
namespace NHibernate.Tuple.Entity
{
+
/// <summary> An <see cref="IEntityTuplizer"/> specific to the POCO entity mode. </summary>
public class PocoEntityTuplizer : AbstractEntityTuplizer
{
@@ -23,9 +25,23 @@
private readonly bool islifecycleImplementor;
private readonly bool isValidatableImplementor;
private readonly HashedSet<string> lazyPropertyNames = new HashedSet<string>();
- private readonly IReflectionOptimizer optimizer;
+ [NonSerialized]
+ private IReflectionOptimizer optimizer;
private readonly IProxyValidator proxyValidator;
+ [OnDeserialized]
+ internal void OnDeserialized(StreamingContext context)
+ {
+ SetReflectionOptimizer();
+ }
+ protected void SetReflectionOptimizer()
+ {
+ if (Cfg.Environment.UseReflectionOptimizer)
+ {
+ // NH different behavior fo NH-1587
+ optimizer = Cfg.Environment.BytecodeProvider.GetReflectionOptimizer(mappedClass, getters, setters);
+ }
+ }
public PocoEntityTuplizer(EntityMetamodel entityMetamodel, PersistentClass mappedEntity)
: base(entityMetamodel, mappedEntity)
{
@@ -39,12 +55,8 @@
if (property.IsLazy)
lazyPropertyNames.Add(property.Name);
}
+ SetReflectionOptimizer();
- if (Cfg.Environment.UseReflectionOptimizer)
- {
- // NH different behavior fo NH-1587
- optimizer = Cfg.Environment.BytecodeProvider.GetReflectionOptimizer(mappedClass, getters, setters);
- }
Instantiator = BuildInstantiator(mappedEntity);
if (hasCustomAccessors)
Modified: trunk/nhibernate/src/NHibernate/Type/AbstractType.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/AbstractType.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Type/AbstractType.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -208,7 +208,7 @@
}
else
{
- include = ForeignKeyDirection.ForeignKeyFromParent == foreignKeyDirection;
+ include = ForeignKeyDirection.ForeignKeyFromParent.Equals(foreignKeyDirection);
}
return include ? Replace(original, target, session, owner, copyCache) : target;
}
Modified: trunk/nhibernate/src/NHibernate/Type/ForeignKeyDirection.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/ForeignKeyDirection.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Type/ForeignKeyDirection.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -3,6 +3,7 @@
namespace NHibernate.Type
{
using System;
+ using System.Runtime.Serialization;
/// <summary>
/// Represents directionality of the foreign key constraint
@@ -19,7 +20,10 @@
{
public override bool CascadeNow(CascadePoint cascadePoint)
{
- return cascadePoint != CascadePoint.BeforeInsertAfterDelete;
+ return cascadePoint != CascadePoint.BeforeInsertAfterDelete;}
+ public override bool Equals(object obj)
+ {
+ return obj is ForeignKeyToParentClass; ;
}
}
[Serializable]
@@ -29,6 +33,10 @@
{
return cascadePoint != CascadePoint.AfterInsertBeforeDelete;
}
+ public override bool Equals(object obj)
+ {
+ return obj is ForeignKeyFromParentClass; ;
+ }
}
/// <summary>
Modified: trunk/nhibernate/src/NHibernate/Type/OneToOneType.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/OneToOneType.cs 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate/Type/OneToOneType.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -113,7 +113,7 @@
public override bool IsNullable
{
- get { return foreignKeyDirection == ForeignKeyDirection.ForeignKeyToParent; }
+ get { return foreignKeyDirection.Equals(ForeignKeyDirection.ForeignKeyToParent); }
}
public override bool UseLHSPrimaryKey
Added: trunk/nhibernate/src/NHibernate.Test/CfgTest/ConfigurationSerializationTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/CfgTest/ConfigurationSerializationTests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/CfgTest/ConfigurationSerializationTests.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using NUnit.Framework;
+using NHibernate.Cfg;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Reflection;
+using NHibernate.Tool.hbm2ddl;
+using NHibernate.DomainModel;
+using System.IO;
+using NUnit.Framework.SyntaxHelpers;
+namespace NHibernate.Test.CfgTest
+{
+ [TestFixture]
+ public class ConfigurationSerializationTests
+ {
+ [Test]
+ public void Configuration_should_be_serializable()
+ {
+ NHAssert.HaveSerializableAttribute(typeof (Configuration));
+ }
+
+ [Test]
+ public void Basic_CRUD_should_work()
+ {
+ Assembly assembly = Assembly.Load("NHibernate.DomainModel");
+ Configuration cfg = new Configuration();
+ cfg.AddResource("NHibernate.DomainModel.ParentChild.hbm.xml", assembly);
+
+ BinaryFormatter formatter = new BinaryFormatter();
+ var memoryStream = new MemoryStream();
+ formatter.Serialize(memoryStream, cfg);
+ memoryStream.Position = 0;
+ cfg = formatter.Deserialize(memoryStream) as Configuration;
+ SchemaExport export = new SchemaExport(cfg);
+ export.Execute(true, true, false, true);
+ var sf = cfg.BuildSessionFactory();
+ using(var session=sf.OpenSession())
+ using(var tran=session.BeginTransaction())
+ {
+ Parent parent = new Parent();
+ Child child = new Child();
+ parent.Child = child;
+ parent.X = 9;
+ parent.Count = 5;
+ child.Parent = parent;
+ child.Count = 3;
+ child.X = 4;
+ session.Save(parent);
+ session.Save(child);
+ tran.Commit();
+ }
+
+ using (var session = sf.OpenSession())
+ using (var tran = session.BeginTransaction())
+ {
+ Parent parent = session.Get<Parent>(1L);
+ Assert.That(parent.Count, Is.EqualTo(5));
+ Assert.That(parent.X, Is.EqualTo(9));
+ Assert.That(parent.Child, Is.Not.Null);
+ Assert.That(parent.Child.X, Is.EqualTo(4));
+ Assert.That(parent.Child.Count, Is.EqualTo(3));
+ Assert.That(parent.Child.Parent, Is.EqualTo(parent));
+ }
+
+
+ using (var session = sf.OpenSession())
+ using (var tran = session.BeginTransaction())
+ {
+ var p = session.Get<Parent>(1L);
+ var c = session.Get<Child>(1L);
+ session.Delete(c);
+ session.Delete(p);
+ tran.Commit();
+ }
+ using (var session = sf.OpenSession())
+ using (var tran = session.BeginTransaction())
+ {
+ var p = session.Get<Parent>(1L);
+ Assert.That(p, Is.Null);
+ }
+ export.Drop(true, true);
+ }
+ }
+}
Added: trunk/nhibernate/src/NHibernate.Test/EngineTest/NativeSqlQueryReturnTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/EngineTest/NativeSqlQueryReturnTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/EngineTest/NativeSqlQueryReturnTest.cs 2009-03-10 22:43:13 UTC (rev 4122)
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using NUnit.Framework;
+using NHibernate.Engine.Query.Sql;
+
+namespace NHibernate.Test.EngineTest
+{
+ [TestFixture]
+ public class NativeSqlQueryReturnTest
+ {
+ [Test]
+ public void AllEmbeddedTypesAreMarkedSerializable()
+ {
+ NHAssert.InheritedAreMarkedSerializable(typeof(INativeSQLQueryReturn));
+ }
+ }
+}
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-03-10 17:54:00 UTC (rev 4121)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-03-10 22:43:13 UTC (rev 4122)
@@ -91,6 +91,7 @@
<Compile Include="Cascade\RefreshFixture.cs" />
<Compile Include="CfgTest\ConfigurationFixture.cs" />
<Compile Include="CfgTest\ConfigurationSchemaFixture.cs" />
+ <Compile Include="CfgTest\ConfigurationSerializationTests.cs" />
<Compile Include="CfgTest\DefaultNsAssmFixture.cs" />
<Compile Include="CfgTest\HbmBinderFixture.cs" />
<Compile Include="CfgTest\HbmOrderingFixture.cs" />
@@ -161,6 +162,7 @@
<Compile Include="DynamicEntity\Tuplizer\MyEntityInstantiator.cs" />
<Compile Include="DynamicEntity\Tuplizer\MyEntityTuplizer.cs" />
<Compile Include="DynamicEntity\Tuplizer\TuplizerDynamicEntity.cs" />
+ <Compile Include="EngineTest\NativeSqlQueryReturnTest.cs" />
<Compile Include="EngineTest\TypedValueFixture.cs" />
<Compile Include="EntityModeTest\Map\Basic\DynamicClassFixture.cs" />
<Compile Include="EntityModeTest\Multi\MultiRepresentationFixture.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|