|
From: <fab...@us...> - 2010-09-24 04:50:58
|
Revision: 5211
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5211&view=rev
Author: fabiomaulo
Date: 2010-09-24 04:50:50 +0000 (Fri, 24 Sep 2010)
Log Message:
-----------
Fix NH-2112
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Type/GenericMapType.cs
trunk/nhibernate/src/NHibernate/Type/MapType.cs
trunk/nhibernate/src/NHibernate.Test/App.config
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Fixture.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Mappings.hbm.xml
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Model.cs
Modified: trunk/nhibernate/src/NHibernate/Type/GenericMapType.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/GenericMapType.cs 2010-09-24 03:01:49 UTC (rev 5210)
+++ trunk/nhibernate/src/NHibernate/Type/GenericMapType.cs 2010-09-24 04:50:50 UTC (rev 5211)
@@ -79,6 +79,14 @@
result[key] = value;
}
+ var originalPc = original as IPersistentCollection;
+ var resultPc = result as IPersistentCollection;
+ if (originalPc != null && resultPc != null)
+ {
+ if (!originalPc.IsDirty)
+ resultPc.ClearDirty();
+ }
+
return result;
}
Modified: trunk/nhibernate/src/NHibernate/Type/MapType.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/MapType.cs 2010-09-24 03:01:49 UTC (rev 5210)
+++ trunk/nhibernate/src/NHibernate/Type/MapType.cs 2010-09-24 04:50:50 UTC (rev 5211)
@@ -89,6 +89,14 @@
result[key] = value;
}
+ var originalPc = original as IPersistentCollection;
+ var resultPc = result as IPersistentCollection;
+ if (originalPc != null && resultPc != null)
+ {
+ if (!originalPc.IsDirty)
+ resultPc.ClearDirty();
+ }
+
return result;
}
Modified: trunk/nhibernate/src/NHibernate.Test/App.config
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/App.config 2010-09-24 03:01:49 UTC (rev 5210)
+++ trunk/nhibernate/src/NHibernate.Test/App.config 2010-09-24 04:50:50 UTC (rev 5211)
@@ -126,7 +126,7 @@
</logger>
<logger name="NHibernate.SQL">
- <level value="OFF" />
+ <level value="DEBUG" />
</logger>
<logger name="NHibernate.AdoNet.AbstractBatcher">
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Fixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Fixture.cs 2010-09-24 04:50:50 UTC (rev 5211)
@@ -0,0 +1,78 @@
+using NUnit.Framework;
+using NHibernate.Cfg;
+
+namespace NHibernate.Test.NHSpecificTest.NH2112
+{
+ [TestFixture]
+ public class Fixture : BugTestCase
+ {
+ protected override void Configure(Configuration configuration)
+ {
+ configuration.SetProperty(Environment.GenerateStatistics, "true");
+ configuration.SetProperty(Environment.BatchSize, "0");
+ }
+
+ protected override void OnTearDown()
+ {
+ using (ISession s = OpenSession())
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ s.CreateSQLQuery("DELETE FROM AMapB").ExecuteUpdate();
+ s.CreateSQLQuery("DELETE FROM TableA").ExecuteUpdate();
+ s.CreateSQLQuery("DELETE FROM TableB").ExecuteUpdate();
+ tx.Commit();
+ }
+ }
+
+ [Test]
+ public void Test()
+ {
+ A a;
+ using (ISession s = OpenSession())
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ a = new A();
+ a.Name = "A";
+ B b1 = new B{ Name = "B1"};
+ s.Save(b1);
+ B b2 = new B{ Name = "B2"};
+ s.Save(b2);
+ a.Map.Add(b1 , "B1Text");
+ a.Map.Add(b2, "B2Text");
+ s.Save(a);
+ s.Flush();
+ tx.Commit();
+ }
+ ClearCounts();
+ using (ISession s = OpenSession())
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ A aCopy = (A)s.Merge(a);
+ s.Flush();
+ tx.Commit();
+ }
+ AssertUpdateCount(0);
+ AssertInsertCount(0);
+ }
+ protected void ClearCounts()
+ {
+ sessions.Statistics.Clear();
+ }
+
+ protected void AssertInsertCount(long expected)
+ {
+ Assert.That(sessions.Statistics.EntityInsertCount, Is.EqualTo(expected), "unexpected insert count");
+ }
+
+ protected void AssertUpdateCount(int expected)
+ {
+ Assert.That(sessions.Statistics.EntityUpdateCount, Is.EqualTo(expected), "unexpected update count");
+ }
+
+ protected void AssertDeleteCount(int expected)
+ {
+ Assert.That(sessions.Statistics.EntityDeleteCount, Is.EqualTo(expected), "unexpected delete count");
+ }
+
+ }
+}
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Mappings.hbm.xml 2010-09-24 04:50:50 UTC (rev 5211)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ namespace="NHibernate.Test.NHSpecificTest.NH2112"
+ assembly="NHibernate.Test">
+
+ <class name="A" table="TableA">
+ <id name="Id">
+ <generator class="native"/>
+ </id>
+ <version name="Version" column="Version"/>
+ <property name="Name"/>
+ <map name="Map" table ="AMapB" cascade="all-delete-orphan" lazy="true">
+ <key column="AId"/>
+ <index-many-to-many class="B" column="BId"/>
+ <element column="Text" type="System.String"/>
+ </map>
+ </class>
+
+ <class name="B" table="TableB">
+ <id name="Id">
+ <generator class="native"/>
+ </id>
+ <property name="Name"/>
+ </class>
+</hibernate-mapping>
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Model.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Model.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2112/Model.cs 2010-09-24 04:50:50 UTC (rev 5211)
@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Generic;
+
+namespace NHibernate.Test.NHSpecificTest.NH2112
+{
+ [Serializable]
+ public abstract class BaseEntity<TEntity, TKey> : IEquatable<TEntity>
+ where TEntity : BaseEntity<TEntity, TKey>
+ where TKey : struct
+ {
+ public virtual TKey? Id { get; set; }
+
+ public virtual bool Equals(TEntity other)
+ {
+ if (other == null) return false;
+ if (object.ReferenceEquals(this, other)) return true;
+ if (Id != null && other.Id == null) return false;
+ if (Id == null && other.Id != null) return false;
+ if (Id == null && other.Id == null)
+ return object.ReferenceEquals(this, other);
+ else
+ return Id.Value.Equals(other.Id.Value);
+ }
+ public override bool Equals(object obj)
+ {
+
+ return this.Equals(obj as TEntity);
+ }
+ private int? mHashCode;
+ public override int GetHashCode()
+ {
+ if (mHashCode == null) // le hashcode retourné doit être le meme tout le long de la vie de l'objet
+ {
+ if (this.Id != null)
+ mHashCode = this.Id.GetHashCode();
+ else mHashCode = base.GetHashCode();
+ }
+ return mHashCode.Value;
+ }
+ public virtual bool IsNew
+ {
+ get
+ {
+ return (Id == null);
+ }
+ }
+ }
+
+ public class A : BaseEntity<A, int>
+ {
+ public A()
+ {
+ Map = new Dictionary<B, string>();
+ }
+
+ private int version;
+ public virtual int Version
+ {
+ get { return version; }
+ set { version = value; }
+ }
+
+ public virtual string Name { get; set; }
+ public virtual IDictionary<B, string> Map { get; set; }
+
+ }
+
+ public class B : BaseEntity<B, int>
+ {
+ public virtual string Name { get; set; }
+ }
+}
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-24 03:01:49 UTC (rev 5210)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-24 04:50:50 UTC (rev 5211)
@@ -467,6 +467,8 @@
<Compile Include="NHSpecificTest\NH1836\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2111\A.cs" />
<Compile Include="NHSpecificTest\NH2111\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH2112\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH2112\Model.cs" />
<Compile Include="NHSpecificTest\NH2138\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2147\DefaultBatchSize.cs" />
<Compile Include="NHSpecificTest\NH2148\BugFixture.cs" />
@@ -2293,6 +2295,7 @@
<EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" />
<EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" />
<Content Include="DynamicEntity\package.html" />
+ <EmbeddedResource Include="NHSpecificTest\NH2112\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2147\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2138\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2288\AclassWithDefault.hbm.xml" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|