Thanks, applied in r1100. On Mon, Oct 5, 2009 at 12:37 PM, Hristo Deshev <[email protected]>wrote:
> Hi Chad, > > Thanks for pointing me in the right direction. I submitted the patch. > > Hristo > > On Mon, Oct 5, 2009 at 7:23 PM, Chad Lee <[email protected]> wrote: > >> Hi Hristo, >> >> Thanks for the patch. If you could, please create a jira issue and submit >> the patch there. >> >> http://jira.nhforge.org/ <http://nhjira.koah.net/secure/Dashboard.jspa> >> >> On Mon, Oct 5, 2009 at 6:54 AM, Hristo Deshev <[email protected]>wrote: >> >>> >>> Hi everyone, >>> >>> I'm using NHibernate.Linq to expose data in a REST-ful manner using >>> ADO.NET Data Services (ADS). I discovered that when updating an entity >>> using a HTTP PUT request, the current IUpdatable implementation will >>> reset all of the entity's properties to their default (usually null) >>> values. While this is the desired behavior for primitive properties, >>> it shouldn't be done for entity properties. The default IUpdatable >>> implementation that ADS contains for ADO.NET Entity Framework checks >>> if the property is of an entity type and if so, skips resetting its >>> value. >>> >>> I have done the same for NHibernateContext that implements IUpdatable. >>> I get the property type from the IClassMetadata object and reset the >>> property only if the property type IsEntityType property is false. I >>> also added two tests that cover the scenarios. So, I'd like to submit >>> a patch. Is this the correct place to do so? >>> >>> Find the patch below (also available at <http://dl.getdropbox.com/u/ >>> 1838958/ResetResourceNotAffectingEntityProps.patch<http://dl.getdropbox.com/u/%0A1838958/ResetResourceNotAffectingEntityProps.patch> >>> >). >>> >>> Best, >>> Hristo Deshev >>> ~~~~~~~~~~~~~~~~~~~~~ >>> >>> Index: src/NHibernate.Linq.Tests/IUpdatableTests.cs >>> =================================================================== >>> --- src/NHibernate.Linq.Tests/IUpdatableTests.cs (revision 1041) >>> +++ src/NHibernate.Linq.Tests/IUpdatableTests.cs (working copy) >>> @@ -216,5 +216,25 @@ >>> Assert.AreSame(usr, usr2); >>> } >>> >>> + [Test] >>> + public void TestResetResourceForPrimitiveProperties() >>> + { >>> + var simpleEntity = (AnotherEntity) >>> update.CreateResource >>> ("AnotherEntities", typeof(AnotherEntity).FullName); >>> + update.ResetResource(simpleEntity); >>> + Assert.IsNull(simpleEntity.Output); >>> + } >>> + >>> + [Test] >>> + public void TestResetResourceForEntityProperties() >>> + { >>> + var complexEntity = (Role) >>> update.CreateResource("Roles", typeof >>> (Role).FullName); >>> + var simpleEntity = (AnotherEntity) >>> update.CreateResource >>> ("AnotherEntities", typeof(AnotherEntity).FullName); >>> + complexEntity.Entity = simpleEntity; >>> + >>> + update.ResetResource(complexEntity); >>> + Assert.IsNull(complexEntity.Name, "Simple >>> property gets reset."); >>> + Assert.IsNotNull(complexEntity.Entity, "Entity >>> property gets >>> preserved."); >>> + } >>> + >>> } >>> } >>> Index: src/NHibernate.Linq/NHibernateContext.cs >>> =================================================================== >>> --- src/NHibernate.Linq/NHibernateContext.cs (revision 1041) >>> +++ src/NHibernate.Linq/NHibernateContext.cs (working copy) >>> @@ -302,11 +302,16 @@ >>> IClassMetadata metadata = >>> session.SessionFactory.GetClassMetadata >>> (resource.GetType().ToString()); >>> object tempCopy = metadata.Instantiate(null, >>> EntityMode.Poco); >>> >>> - // Copy the default non-keys >>> - foreach (string propName in >>> metadata.PropertyNames) >>> + for (int i = 0; i < >>> metadata.PropertyNames.Length; i++) >>> { >>> - object value = >>> metadata.GetPropertyValue(tempCopy, propName, >>> EntityMode.Poco); >>> - update.SetValue(resource, propName, >>> value); >>> + var propertyType = >>> metadata.PropertyTypes[i]; >>> + var propName = metadata.PropertyNames[i]; >>> + >>> + if (!propertyType.IsEntityType) >>> + { >>> + object value = >>> metadata.GetPropertyValue(tempCopy, propName, >>> EntityMode.Poco); >>> + update.SetValue(resource, >>> propName, value); >>> + } >>> } >>> >>> //Return the new resource >>> >>> >>> >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "NHibernate Contrib - Development Group" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com.ar/group/nhcdevs?hl=en -~----------~----~----~----~------~----~------~--~---
