Hello all,

I've been using nhibernate trunk for a while without problems so far.

Two issues that I've found so far are:

1) When trying to serialize the configuration (using a method similar
to 
http://nhforge.org/blogs/nhibernate/archive/2009/03/13/an-improvement-on-sessionfactory-initialization.aspx
) and one of the property mappings is using the 'ReadOnlyAccessor' it
throws because that class is not marked as Serializable... I've posted
a patch here: http://pastebin.com/Emquf8Jg that adds the serializable
attribute to the ReadOnlyAccesor and the private NoopSetter class, and
with that, the configuration gets serialized without problems.

2) With Sql Server 2008, (using the 2008 dialect), mapping a TimeSpan
property with TimeAsTimeSpan (with the respective time(x) column in
the db) works well just for saving/retrieving the value, but as soon
as I try to query using that field (I've tried using QueryOver<> /
Criteria, ex: .Where(x => x.TimeSpanProperty == TimeSpan.FromDays(1))
or >=, <=, etc, I get db errors like 'time and datetime are
incompatible in the greater than or equal to operator.', etc...) the
problem is a bug in the .net System.Data.SqlClient.SqlParameter
DbType setter (that calls an internal
MetaType.GetMetaTypeFromDbType(value);) that sets the SqlDbType to
DateTime instead of time... (you can read more about this bug - and
it's confirmation - on
http://connect.microsoft.com/VisualStudio/feedback/details/381934/sqlparameter-dbtype-dbtype-time-sets-the-parameter-to-sqldbtype-datetime-instead-of-sqldbtype-time
)

I wrote a workaround that 'works for me', you can find the patch here
(warning: it's as hackish as it can be): http://pastebin.com/S6Tr6Mg0

I think it'd be better to set the dbParam.Size in the
SqlClientDriver.cs -> SetDefaultParameterSize or SetParameterSizes
methods... etc...

It's an ugly workaround but it allows me to save/retrieve & query
using that field without problems...

I don't know if the NH team is willing to put a workaround in the nh
code for that .net bug, or maybe should I try using a IUserType that
forces the SqlDbType to Time in the NullSafeSet method...

Opinions?

Thanks

Reply via email to