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