Yes 2009/10/7 Krzysztof Koźmic <[email protected]>
> No problem :) > > So to make it clear - you think it's not worthwhile to try to patch > ReflectionOptimizer for this (uncommon, I agree) scenario, and it's better > to go the IUserType/ Custom Dialect way. Is that correct? > > > Krzysztof > > > Fabio Maulo wrote: > > ah... and you know which is the price our friends should pay for a support > question in dev-list, no ? The price is a blog-post about the problem and > the solution... even better if cross-post in nh-forge. > > 2009/10/7 Fabio Maulo <[email protected]> > >> LOL... have a look to the Dialect... there you can define your >> default behaviour for UInt32 >> >> 2009/10/7 Krzysztof Koźmic <[email protected]> >> >>> >>> Yes, you're right - I'm an idiot :) >>> >>> However with the BIGINT, I'm still getting an exception, although >>> different: >>> System.ArgumentException: No mapping exists from DbType UInt32 to a known >>> SqlDbType. >>> Not sure if it's the late hour, me being an idiot again, or it just won't >>> work this way. >>> >>> Fabio Maulo wrote: >>> >>>> What ? >>>> Follow the xsd and re-read what I wrote.... <property .......> >>>> <column name="xxxx" sql-type="whatever"/> >>>> </property> >>>> >>>> 2009/10/7 Krzysztof Koźmic <[email protected] <mailto: >>>> [email protected]>> >>>> >>>> Yeah, IUserType is what I ended up doing, but I consider this >>>> behavior a bug anyway. >>>> >>>> Fabio... I get mapping exception (on the trunk) >>>> "XML validation error: The 'sql-type' attribute is not declared." >>>> >>>> >>>> Ayende Rahien wrote: >>>> >>>>> I don't think so, at the time we create the adapters, we don't >>>>> know what the value in the DB will be. >>>>> This isn't actually a problem, however. >>>>> NHibernate may be somewhat lax about these things, but the proper >>>>> way to support such a scenario is to provide value conversion >>>>> using an IUserType >>>>> >>>>> 2009/10/7 Krzysztof Koźmic <[email protected] >>>>> <mailto:[email protected]>> >>>>> >>>>> I was trying to create a patch for scenarios where we have >>>>> one numeric type of property on the model, and we map it to >>>>> different type in DB, which currently produces exception in >>>>> NHibernate. >>>>> >>>>> In my scenario, where I stumbled upon this bug I had uint on >>>>> my model, that I wanted to map to long on a SQL Server >>>>> database (which apparently does not support unsigned types, >>>>> which is besides the point). >>>>> >>>>> So with Entity like this: >>>>> >>>>> public class UIntAsLong >>>>> { >>>>> private Guid Id { get; set; } >>>>> public virtual uint UIntProp { get; set; } >>>>> } >>>>> >>>>> and mapping like this: >>>>> <?xml version="1.0"?> >>>>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" >>>>> assembly="Foo" >>>>> namespace="Foo"> >>>>> >>>>> <class name="UIntAsLong"> >>>>> <id name="Id"/> >>>>> <property name="UIntProp" not-null="true" type="long"/> >>>>> </class> >>>>> </hibernate-mapping> >>>>> >>>>> I'm trying to make it work. >>>>> >>>>> The reason for the exception, is that NHibernate is basically >>>>> trying to do the following: >>>>> >>>>> uint foo = 123u; >>>>> long fooLong = foo; //implicit cast >>>>> object fooObj = fooLong; //boxing >>>>> foo = (uint)fooObj; //trying to do unboxing and numeric >>>>> conversion at onece - runtime exception. >>>>> >>>>> For this to work, instead of the last line we'd have to have: >>>>> >>>>> long fooLongAgain = (long)fooLong; //unboxing >>>>> uint fooUint = (uint)fooLongAgain; //numeric conversion >>>>> >>>>> This seemed like a trivial change, but there's *one piece of >>>>> information missing* - the ReflectionOptimizer class, which >>>>> generates the getters and setters does not know to what type >>>>> the property is being cast (the long in the above example). >>>>> >>>>> Is there a way to provide it with that information? >>>>> >>>>> Krzysztof >>>>> >>>>> >>>>> >>>> >>>> >>>> >>>> -- >>>> Fabio Maulo >>>> >>> >>> >> >> >> -- >> Fabio Maulo >> > > > > -- > Fabio Maulo > > >
