diff --git a/src/NHibernate.Test/NHSpecificTest/NH3374/FixtureByCode.cs b/src/NHibernate.Test/NHSpecificTest/NH3374/FixtureByCode.cs index 88bf0c1ab1d..188deb144e0 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3374/FixtureByCode.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3374/FixtureByCode.cs @@ -6,7 +6,7 @@ namespace NHibernate.Test.NHSpecificTest.NH3374 { - [Ignore("Not fixed yet.")] + [TestFixture] public class ByCodeFixture : TestCaseMappingByCode { protected override HbmMapping GetMappings() @@ -27,11 +27,7 @@ protected override HbmMapping GetMappings() map.Id(x => x.Id, idMapper => idMapper.Generator(Generators.Identity)); map.Property(x => x.Bytes, y => { - y.Column(x => - { - x.SqlType("varbinary(max)"); - x.Length(int.MaxValue); - }); + y.Length(int.MaxValue); y.Lazy(true); }); }); diff --git a/src/NHibernate/Type/TypeHelper.cs b/src/NHibernate/Type/TypeHelper.cs index 8f750c48944..51f992f0993 100644 --- a/src/NHibernate/Type/TypeHelper.cs +++ b/src/NHibernate/Type/TypeHelper.cs @@ -126,6 +126,25 @@ public static object[] Replace(object[] original, object[] target, IType[] types { copied[i] = target[i]; } + else if (target[i] == LazyPropertyInitializer.UnfetchedProperty) + { + // Should be no need to check for target[i] == PropertyAccessStrategyBackRefImpl.UNKNOWN + // because PropertyAccessStrategyBackRefImpl.get( object ) returns + // PropertyAccessStrategyBackRefImpl.UNKNOWN, so target[i] == original[i]. + // + // We know from above that original[i] != LazyPropertyInitializer.UNFETCHED_PROPERTY && + // original[i] != PropertyAccessStrategyBackRefImpl.UNKNOWN; + // This is a case where the entity being merged has a lazy property + // that has been initialized. Copy the initialized value from original. + if (types[i].IsMutable) + { + copied[i] = types[i].DeepCopy(original[i], session.Factory); + } + else + { + copied[i] = original[i]; + } + } else { copied[i] = types[i].Replace(original[i], target[i], session, owner, copiedAlready);