These enums will never change. There's no reason to add more values here (and if I ever do, I realize it'll be somewhat of a pain)..
On Sun, Jun 6, 2010 at 9:08 PM, Michael Sync <mchls...@gmail.com> wrote: > I just check the Mauricio's answer on Stackoverflow. > I have some confusions.. >>>public enum OrderState {InQueue, Ordered, Error, Cancelled} > If we add one more row (one more OrderState) in Database, Is the enum > "OrderState" going to change automatically? > > The reason that we want to keep the enum in database is to allow user to > have as many value as we want, right? The code shouldn't be needed to > re-compile.. > > On Mon, Jun 7, 2010 at 12:02 PM, Mauricio Scheffer > <mauricioschef...@gmail.com> wrote: >> >> Yep, that's pretty much what I answered on stackoverflow ( >> >> http://stackoverflow.com/questions/2979026/mapping-enums-to-database-with-nhibernate-castle-activerecord >> , I just see it here). Is it really necessary to override the SqlType >> property? >> >> On Jun 5, 3:09 am, Mike Christensen <m...@kitchenpc.com> wrote: >> > Update: >> > >> > Ok I found a kinda cleverish/hacky way of doing this. First off, I >> > only have one mapping class: >> > >> > public class PgEnumMapper<T> : NHibernate.Type.EnumStringType<T> >> > { >> > public override NHibernate.SqlTypes.SqlType SqlType >> > { >> > get { return new NHibernate.SqlTypes.SqlType(DbType.Object); } >> > } >> > >> > } >> > >> > Then on my property, I setup the mapping like so: >> > >> > [Property(NotNull = true, SqlType = "OrderState", ColumnType = >> > "DB.PgEnumMapper`1[DB.OrderState, WebSite], WebSite")] >> > public OrderState State >> > { >> > get { return state; } >> > set { state = value; } >> > >> > } >> > >> > If I find nothing better, I'll go this route.. I don't like it 100% >> > because it looks kinda hacky, and also if I change enum names, Visual >> > Studio cannot refactor them since they're all in strings.. Am I going >> > down the right path, or is there some stupidly easy approach I'm >> > missing? Thanks! >> > >> > Mike >> > >> > On Jun 4, 10:47 pm, Mike Christensen <m...@kitchenpc.com> wrote: >> > >> > >> > >> > > By default, an enum property gets mapped to an integer column type in >> > > the database. I'm interested in mapping enums to an enum database >> > > type, such as this one: >> > >> > > CREATE TYPE OrderState AS ENUM ('Preview', 'InQueue', 'Ordered', >> > > 'Error', 'Cancelled'); >> > >> > > It seems you can fairly easily change ActiveRecord to use strings for >> > > enums instead of integers, and there's several blog posts I've found >> > > on this. However, they have one big flaw. The SQL that gets >> > > generated looks something like this: >> > >> > > INSERT INTO TestTable (State, Id) VALUES ('Preview'::text, >> > > '9dea2a34-566a-45ea-84fd-24b86403ef5b'::uuid) >> > >> > > As you can see, the State value is casted to a text, which will throw >> > > a SQL error as the column type is OrderState. I've found one way to >> > > fix this, but I don't like my solution. I basically create an IType >> > > that knows how to map this enum: >> > >> > > public class OrderStateMapper : >> > > NHibernate.Type.EnumStringType<OrderState> >> > > { >> > > public override NHibernate.SqlTypes.SqlType SqlType >> > > { >> > > get { return new NHibernate.SqlTypes.SqlType(DbType.Object); } >> > > } >> > >> > > } >> > >> > > Since I override SqlType and return DbType.Object, NHibernate will no >> > > longer try to cast my value into a text and everything will work. The >> > > reason I don't like this solution is I now have to create a Mapper >> > > class for every enum I want to map to my database, which in my case is >> > > a lot and I want to be able to easily add more and not worry about >> > > this issue. I can see why EnumStringType needs to know the type of >> > > the enum, so it can parse data values and rehydrate OrderState >> > > objects. However, isn't there a way to tell ActiveRecord to just use >> > > the string value for the enum and not try to cast it to text? >> > > Basically the SQL statement I want to generate is: >> > >> > > INSERT INTO TestTable (State, Id) VALUES ('Preview', >> > > '9dea2a34-566a-45ea-84fd-24b86403ef5b'::uuid) >> > > or even >> > > INSERT INTO TestTable (State, Id) VALUES ('Preview'::OrderState, >> > > '9dea2a34-566a-45ea-84fd-24b86403ef5b'::uuid) >> > >> > > 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 >> castle-project-us...@googlegroups.com. >> To unsubscribe from this group, send email to >> castle-project-users+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/castle-project-users?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "Castle Project Users" group. > To post to this group, send email to castle-project-us...@googlegroups.com. > To unsubscribe from this group, send email to > castle-project-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/castle-project-users?hl=en. > -- You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to castle-project-us...@googlegroups.com. To unsubscribe from this group, send email to castle-project-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en.