Now I understands it. For mapping enum, you 'hard-code' your type to
int, it will cause the object become dirty immediately.

As explained in the following two posts:

http://graysmatter.codivation.com/CommentView,guid,6fe1a7c3-1245-45b8-98f1-e4b369dcded9.aspx
http://blog.benhartonline.com/post/2008/10/09/NHibernate-objects-dirty-on-load-with-nothing-set-in-between.aspx

In my case, I am migrating my mapping from HBM to FluentNHibernate. In
HBM, I can just ignore the type, and NHibernate will figure out the
base type of my enum for me (which is int) ...

Now in FluentNhibernate, if I didn't set CustomTypeIs, I am forced to
map the column type of string .... which is not right ...

Is there a way to work around this issue?


On Apr 24, 3:00 pm, harrychou <[email protected]> wrote:
> I have a problem. Whenever I add a mapping with .CustomTypeIs(typeof
> (int)), NHiberate thinks my object is dirty and try to update the
> object for me. ...
>
> This is causing performance problem since FindAll call will cause
> massive update statements ....
>
> The reason I use .CustomTypeIs(typeof(int)) is that I want my enum to
> map to integer ...
>
> My mapping is like the following, whenever I uncommnet the last row
> (Map(x => x.ContractType).CustomTypeIs(typeof(int));)  I didn't get
> the extra update statement.  ....
>
>         public ClientMap()
>         {
>             Id(x => x.ID, "ClientID").GeneratedBy.GuidComb();
>             Version(x => x.Version).SetAttribute("unsaved-value",
> "-1");
>             Map(x => x.LastUpdatedDateTime);
>             Map(x => x.LastUpdatedUser);
>             Map(x => x.CreatedDateTime);
>             Map(x => x.CreatedUser);
>
>             Map(x => x.SharePointID);
>             Map(x => x.BMC_ID);
>
>             Map(x => x.ClientName);
>             Map(x => x.CompanyFullName);
>             Map(x => x.AlternativeNames);
>             Map(x => x.Acronym);
>             HasMany(x => x._CompanyAddress).Cascade.AllDeleteOrphan();
>             Map(x => x.RenewalMonth);
>             Map(x => x.Platform);
>             Map(x => x.IsActive);
>             Map(x => x.IsCareFirstConnectClient);
>             Map(x => x.InfoBoxEmail);
>
>             HasMany(x =>
> x._ClientRoleAssignments).Cascade.AllDeleteOrphan();
>
>             HasMany(x => x._ClientContacts).Cascade.AllDeleteOrphan();
>
>             Map(x => x.ContractType).CustomTypeIs(typeof(int));
>    }
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" 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/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to