Please open an issue at Donjon, preferably with a patch. -Markus
2009/10/13 Mike Christensen <[email protected]> > > One quick question. Why do I need to do: > > [Property(NotNull = true, ColumnType = "Website.Price, Website")] > public Price VendorFees {get; set;} > > Shouldn't it know the ColumnType is Price, just as it would know the > column type for Int32 or Boolean? Having to specify the ColumnType in > the property tag seems a bit redundant. Thanks! > > Mike > > On Mon, Oct 12, 2009 at 5:31 PM, Mike Christensen <[email protected]> > wrote: > > Got it.. (BTW, I was referring to the JavascriptSerializer - perhaps > > the XmlSerializer is smarter).. > > > > You just have to mark the extra stuff with ScriptIgnore, such as this: > > > > [ScriptIgnore] > > public Type ReturnedType > > { > > get { return typeof(Price); } > > } > > > > Everything is working awesome now!!! > > > > Thanks all, > > Mike > > > > On Mon, Oct 12, 2009 at 5:17 PM, G. Richard Bellamy > > <[email protected]> wrote: > >> That doesn't sound right... I've serialized IUserType before. Let me try > to > >> find a sample... > >> > >> On Mon, Oct 12, 2009 at 5:15 PM, Mike Christensen <[email protected]> > >> wrote: > >>> > >>> Hi - > >>> > >>> The IUserType approach almost works, however I need to mark my type as > >>> [Serializable] which the implementation for IUserType does not allow > >>> for.. You'll get a circular reference detected when serializing the > >>> getters.. > >>> > >>> Guess it's back to the drawing board.. > >>> > >>> Mike > >>> > >>> On Mon, Oct 12, 2009 at 2:17 PM, Mike Christensen <[email protected]> > >>> wrote: > >>> > Hi - The URL you mentioned only seems to contain information about > >>> > persisting enums as strings, which is great since I was wondering > >>> > about that as well (as PostgreSQL users string for enums).. > >>> > > >>> > Can you point me to any relevant information about IUserType and how > >>> > to create a user defined type that persists in the DB (as an integer, > >>> > rather than serialized byte array)? Thanks! > >>> > > >>> > Mike > >>> > > >>> > On Mon, Oct 12, 2009 at 1:23 PM, Mauricio Scheffer > >>> > <[email protected]> wrote: > >>> >> > >>> >> First, consider using System.Decimal instead of your own Price > class. > >>> >> If you still need some special feature and absolutely need your own > >>> >> Price class, write a NHibernate IUserType. Here are some sample user > >>> >> types: http://nhforge.org/wikis/howtonh/tags/IUserType/default.aspx > >>> >> > >>> >> On Oct 12, 5:14 pm, Mike Christensen <[email protected]> wrote: > >>> >>> Hi guys - I've been struggling with this one for a while, the > scenario > >>> >>> seems very basic but I've spent several hours on this and run into > >>> >>> what seems like NHibernate bugs.. > >>> >>> > >>> >>> Here's the situation. I have a class called "Price" which is > >>> >>> implemented like this: > >>> >>> > >>> >>> [Serializable] > >>> >>> public class Price : IComparable, IFormattable, IComparable<int>, > >>> >>> IEquatable<int> > >>> >>> { > >>> >>> public static implicit operator Price(int cents); > >>> >>> public static implicit operator int(Price price); > >>> >>> public static bool operator ==(Price x, Price y); > >>> >>> public static bool operator !=(Price x, Price y); > >>> >>> public int CompareTo(object obj); > >>> >>> public int CompareTo(int other); > >>> >>> public bool Equals(int other); > >>> >>> } > >>> >>> > >>> >>> As you can see, the compiler will treat Price exactly like an > >>> >>> integer. I can say: > >>> >>> > >>> >>> Price p = 500; //p is $5.00 > >>> >>> > >>> >>> ...as well as compare a Price object to other Price objects or to > >>> >>> ints. > >>> >>> > >>> >>> In ActiveRecord, I'd like to have this: > >>> >>> > >>> >>> [Property(NotNull = true, ColumnType = "Int32")] > >>> >>> public Price VendorFees > >>> >>> { > >>> >>> get { return vendorfees; } > >>> >>> set { vendorfees = value; } > >>> >>> } > >>> >>> > >>> >>> This seems simple enough, and actually the above code works when > you > >>> >>> Create or Update a record, however it causes an exception when you > >>> >>> load. Under the covers, this appears to be an NHibernate bug. > When > >>> >>> NHibernate hydrates an object, in ReflectionOptimizer.cs there's a > >>> >>> function called GenerateSetPropertyValuesMethod. This method > actually > >>> >>> builds IL code (pretty slick) which will loop through the value > array > >>> >>> from the database and set it to the appropriate setters on the > >>> >>> object. However, there's a bug in this code that assumes the DB > type > >>> >>> and the "setter" type are exactly the same. The setter is never > even > >>> >>> called on my object, I just get an exception that says "Cannot cast > >>> >>> Website.Price to System.Int32" (which happens when the IL code is > >>> >>> invoked).. So in my opinion, that's an NHibernate bug however I > don't > >>> >>> see them fixing this. > >>> >>> > >>> >>> The work-around I'm exploring is to get NHibernate to hydrate this > >>> >>> column as a "Price" in the first place. The method I'm trying to > use > >>> >>> would be to do something like this: > >>> >>> > >>> >>> [Property(NotNull = true, ColumnType = > "Website.Price,Website", > >>> >>> SqlType = "integer")] > >>> >>> public Price VendorFees > >>> >>> { > >>> >>> get { return vendorfees; } > >>> >>> set { vendorfees = value; } > >>> >>> } > >>> >>> > >>> >>> I believe this would work, however, Active Record appears to > configure > >>> >>> this column as a serializable type and wants to map it to a byte > array > >>> >>> in the DB. When AR is building the Insert command, I get an > exception > >>> >>> saying the parameter type was bytea but the data was an integer. > >>> >>> > >>> >>> Can anyone point me in the right direction? I'm totally lost on > this > >>> >>> one. Thanks!! > >>> >>> > >>> >>> Mike > >>> >> >> > >>> >> > >>> > > >>> > >>> > >> > >> > >> >> > >> > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" 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/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
