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