How to fine tune FluentNHibernate's auto mapper?
- by Venemo
Okay, so yesterday I managed to get the latest trunk builds of NHibernate and FluentNHibernate to work with my latest little project. (I'm working on a bug tracking application.) I created a nice data access layer using the Repository pattern.
I decided that my entities are nothing special, and also that with the current maturity of ORMs, I don't want to hand-craft the database.
So, I chose to use FluentNHibernate's auto mapping feature with NHibernate's "hbm2ddl.auto" property set to "create".
It really works like a charm. I put the NHibernate configuration in my app domain's config file, set it up, and started playing with it. (For the time being, I created some unit tests only.) It created all tables in the database, and everything I need for it. It even mapped my many-to-many relationships correctly.
However, there are a few small glitches:
All of the columns created in the DB allow null. I understand that it can't predict which properties should allow null and which shouldn't, but at least I'd like to tell it that it should allow null only for those types for which null makes sense in .NET (eg. non-nullable value types shouldn't allow null).
All of the nvarchar and varbinary columns it created, have a default length of 255. I would prefer to have them on max instead of that.
Is there a way to tell the auto mapper about the two simple rules above?
If the answer is no, will it work correctly if I modify the tables it created?
(So, if I set some columns not to allow null, and change the allowed length for some other, will it correctly work with them?)
EDIT:
I managed to achieve the above by using Fluent NHibernate's convention API. Thanks to everyone who helped!
However, there is one more thing: after checking out the convention API, I really would like my IDs to be calld "ID", not "Id", but it seems to me that the PrimaryKey.Name.Is(x => "ID") is not working at all. If I add it to the conventions collection and rewrite my entities' properties to "ID" instead of "Id", it throws an exception that there is no primary key mapped.
Any thoughts on this?