|
From: <fab...@us...> - 2010-07-20 18:37:41
|
Revision: 5022
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5022&view=rev
Author: fabiomaulo
Date: 2010-07-20 18:37:34 +0000 (Tue, 20 Jul 2010)
Log Message:
-----------
Fix NH-2094 (thanks to Johannes Gustafsson for the TEST)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Intercept/AbstractFieldInterceptor.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Fixture.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Mappings.hbm.xml
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Model.cs
Modified: trunk/nhibernate/src/NHibernate/Intercept/AbstractFieldInterceptor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Intercept/AbstractFieldInterceptor.cs 2010-07-20 17:52:31 UTC (rev 5021)
+++ trunk/nhibernate/src/NHibernate/Intercept/AbstractFieldInterceptor.cs 2010-07-20 18:37:34 UTC (rev 5022)
@@ -96,6 +96,11 @@
if (initializing)
return InvokeImplementation;
+ if (!IsUninitializedProperty(fieldName))
+ {
+ return value;
+ }
+
if (session == null)
{
throw new LazyInitializationException("entity with lazy properties is not associated with a session");
@@ -105,17 +110,23 @@
throw new LazyInitializationException("session is not connected");
}
- if (uninitializedFields != null && uninitializedFields.Contains(fieldName))
+ if (IsUninitializedProperty(fieldName))
{
return InitializeField(fieldName, target);
}
- if (value is INHibernateProxy && unwrapProxyFieldNames != null && unwrapProxyFieldNames.Contains(fieldName))
+ var nhproxy = value as INHibernateProxy;
+ if (nhproxy != null && unwrapProxyFieldNames != null && unwrapProxyFieldNames.Contains(fieldName))
{
- return InitializeOrGetAssociation((INHibernateProxy)value, fieldName);
+ return InitializeOrGetAssociation(nhproxy, fieldName);
}
return InvokeImplementation;
}
+ private bool IsUninitializedProperty(string fieldName)
+ {
+ return uninitializedFields != null && uninitializedFields.Contains(fieldName);
+ }
+
private object InitializeOrGetAssociation(INHibernateProxy value, string fieldName)
{
if(value.HibernateLazyInitializer.IsUninitialized)
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Fixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Fixture.cs 2010-07-20 18:37:34 UTC (rev 5022)
@@ -0,0 +1,54 @@
+using NHibernate.ByteCode.Castle;
+using NHibernate.Cfg;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.NH2094
+{
+ [TestFixture]
+ public class Fixture : BugTestCase
+ {
+ protected override void Configure(Configuration configuration)
+ {
+ configuration.SetProperty(Environment.ProxyFactoryFactoryClass,
+ typeof(ProxyFactoryFactory).AssemblyQualifiedName);
+ }
+
+ [Test]
+ public void CanAccessInitializedPropertiesOutsideOfSession()
+ {
+ try
+ {
+ using (var s = OpenSession())
+ {
+ var p = new Person { Id = 1, Name = "Person1", LazyField = "Long field"};
+
+ s.Save(p);
+
+ s.Flush();
+ }
+
+ Person person;
+
+ using (var s = OpenSession())
+ {
+ person = s.Get<Person>(1);
+
+ Assert.AreEqual("Person1", person.Name);
+ Assert.AreEqual("Long field", person.LazyField);
+ }
+
+ Assert.AreEqual("Person1", person.Name);
+ Assert.AreEqual("Long field", person.LazyField);
+ }
+ finally
+ {
+ using (var s = OpenSession())
+ {
+ s.Delete("from Person");
+
+ s.Flush();
+ }
+ }
+ }
+ }
+}
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Mappings.hbm.xml 2010-07-20 18:37:34 UTC (rev 5022)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ assembly="NHibernate.Test"
+ namespace="NHibernate.Test.NHSpecificTest.NH2094">
+
+ <class name="Person">
+ <id name="Id"/>
+ <property name="Name"></property>
+
+ <property name="LazyField" lazy="true"></property>
+ </class>
+
+</hibernate-mapping>
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Model.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Model.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2094/Model.cs 2010-07-20 18:37:34 UTC (rev 5022)
@@ -0,0 +1,12 @@
+using System.Collections.Generic;
+
+namespace NHibernate.Test.NHSpecificTest.NH2094
+{
+ public class Person
+ {
+ public virtual int Id { get; set; }
+ public virtual string Name { get; set; }
+
+ public virtual string LazyField { get; set; }
+ }
+}
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-07-20 17:52:31 UTC (rev 5021)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-07-20 18:37:34 UTC (rev 5022)
@@ -461,6 +461,8 @@
<Compile Include="NHSpecificTest\NH2092\Model.cs" />
<Compile Include="NHSpecificTest\NH2093\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2093\Model.cs" />
+ <Compile Include="NHSpecificTest\NH2094\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH2094\Model.cs" />
<Compile Include="NHSpecificTest\NH2102\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2102\Model.cs" />
<Compile Include="NHSpecificTest\NH2189\Fixture.cs" />
@@ -2185,6 +2187,7 @@
<EmbeddedResource Include="DriverTest\SqlServerCeEntity.hbm.xml" />
<EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" />
<Content Include="DynamicEntity\package.html" />
+ <EmbeddedResource Include="NHSpecificTest\NH2094\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2092\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2093\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2102\Mappings.hbm.xml" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|