|
From: <fab...@us...> - 2011-05-09 14:14:18
|
Revision: 5801
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5801&view=rev
Author: fabiomaulo
Date: 2011-05-09 14:14:11 +0000 (Mon, 09 May 2011)
Log Message:
-----------
Fix NH-2510
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Type/TypeHelper.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2510/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2510/Fixture.cs
Modified: trunk/nhibernate/src/NHibernate/Type/TypeHelper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/TypeHelper.cs 2011-05-08 22:59:17 UTC (rev 5800)
+++ trunk/nhibernate/src/NHibernate/Type/TypeHelper.cs 2011-05-09 14:14:11 UTC (rev 5801)
@@ -61,10 +61,17 @@
/// <returns></returns>
public static object[] Assemble(object[] row, ICacheAssembler[] types, ISessionImplementor session, object owner)
{
- object[] assembled = new object[row.Length];
+ var assembled = new object[row.Length];
for (int i = 0; i < row.Length; i++)
{
- assembled[i] = types[i].Assemble(row[i], session, owner);
+ if (row[i] == LazyPropertyInitializer.UnfetchedProperty || row[i] == BackrefPropertyAccessor.Unknown)
+ {
+ assembled[i] = row[i];
+ }
+ else
+ {
+ assembled[i] = types[i].Assemble(row[i], session, owner);
+ }
}
return assembled;
}
@@ -110,10 +117,17 @@
public static object[] Replace(object[] original, object[] target, IType[] types, ISessionImplementor session,
object owner, IDictionary copiedAlready)
{
- object[] copied = new object[original.Length];
+ var copied = new object[original.Length];
for (int i = 0; i < original.Length; i++)
{
- copied[i] = types[i].Replace(original[i], target[i], session, owner, copiedAlready);
+ if (original[i] == LazyPropertyInitializer.UnfetchedProperty || original[i] == BackrefPropertyAccessor.Unknown)
+ {
+ copied[i] = target[i];
+ }
+ else
+ {
+ copied[i] = types[i].Replace(original[i], target[i], session, owner, copiedAlready);
+ }
}
return copied;
}
@@ -225,7 +239,7 @@
for (int i = 0; i < span; i++)
{
bool dirty =
- // TODO H3: x[ i ] != LazyPropertyInitializer.UnfetchedProperty && //x is the "current" state
+ currentState[i] != LazyPropertyInitializer.UnfetchedProperty &&
properties[i].IsDirtyCheckable(anyUninitializedProperties)
&& properties[i].Type.IsDirty(previousState[i], currentState[i], includeColumns[i], session);
@@ -276,7 +290,7 @@
for (int i = 0; i < span; i++)
{
bool dirty =
- // TODO H3: x[ i ] != LazyPropertyInitializer.UnfetchedProperty && //x is the "current" state
+ currentState[i] != LazyPropertyInitializer.UnfetchedProperty &&
properties[i].IsDirtyCheckable(anyUninitializedProperties)
&& properties[i].Type.IsModified(previousState[i], currentState[i], includeColumns[i], session);
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2510/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2510/Fixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2510/Fixture.cs 2011-05-09 14:14:11 UTC (rev 5801)
@@ -0,0 +1,77 @@
+using System;
+using NHibernate.Cache;
+using NHibernate.Cfg;
+using NHibernate.Cfg.MappingSchema;
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.NH2510
+{
+ public class Image
+ {
+ public virtual int Id { get; set; }
+ public virtual byte[] Data { get; set; }
+ }
+ public class Fixture: TestCaseMappingByCode
+ {
+ protected override HbmMapping GetMappings()
+ {
+ var mapper = new ModelMapper();
+ mapper.Class<Image>(rc =>
+ {
+ rc.Cache(map => map.Usage(CacheUsage.NonstrictReadWrite));
+ rc.Id(x=> x.Id);
+ rc.Property(x => x.Data, map=> map.Lazy(true));
+ });
+ var mappings = mapper.CompileMappingForAllExplicitAddedEntities();
+ return mappings;
+ }
+
+ protected override void Configure(Cfg.Configuration configuration)
+ {
+ configuration.Cache(x=> x.Provider<HashtableCacheProvider>());
+ }
+
+ private class Scenario: IDisposable
+ {
+ private readonly ISessionFactory factory;
+
+ public Scenario(ISessionFactory factory)
+ {
+ this.factory = factory;
+ using (var session = factory.OpenSession())
+ using (session.BeginTransaction())
+ {
+ session.Persist(new Image { Id = 1 });
+ session.Transaction.Commit();
+ }
+ }
+
+ public void Dispose()
+ {
+ using (var session = factory.OpenSession())
+ using (session.BeginTransaction())
+ {
+ session.CreateQuery("delete from Image").ExecuteUpdate();
+ session.Transaction.Commit();
+ }
+ }
+ }
+
+ [Test]
+ public void WhenReadFromCacheThenDoesNotThrow()
+ {
+ using (new Scenario(Sfi))
+ {
+ using (ISession s = OpenSession())
+ {
+ var book = s.Get<Image>(1);
+ }
+ using (ISession s = OpenSession())
+ {
+ var book = s.Get<Image>(1);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-08 22:59:17 UTC (rev 5800)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-09 14:14:11 UTC (rev 5801)
@@ -784,6 +784,7 @@
<Compile Include="NHSpecificTest\NH2505\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2507\Animal.cs" />
<Compile Include="NHSpecificTest\NH2507\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH2510\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2527\FixtureWithNoBatcher.cs" />
<Compile Include="NHSpecificTest\NH2527\Model.cs" />
<Compile Include="NHSpecificTest\NH2530\Domain.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|