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] <mailto:[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]
<mailto:[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]>
<mailto:[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]>
<mailto:[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