I'm working with a legacy system that I'm experimenting with adding NHibernate to. I have class that I need to be mapped to a table, but it has lots of existing methods that are not virtual.
I discovered that I can get NHibernate to load the mapping successfully even with the non-virtual methods present if I set the "lazy" attribute on the class element of the mapping file to "false". I'm wondering what impact this will have on my use of NHibernate with this class.
I understand the meaning of non-lazy loading on collections that belong to an object, but I'm not clear on the meaning of what lazy or eager loading on a class would be. Does that mean all collections belonging to that object would be eager-loaded? Or does it mean that NHibernate no longer uses a dynamic proxy in place of the actual class? Something else?
Also, what's the best course of action here? Is setting that lazy=false value inadvisable? Should I create an interface that the class implements, and then map that to the table? Or should I just bite the bullet and mark all the existing methods on the class virtual?
Thanks in advance for any and all advice!
I always specify lazy=false on the class level in NHIbernate, because I do not want that NHibernate forces me to declare that properties are to be virtual, if I do not want this in my class-model.
When you specify 'lazy' at the class mapping (default), NHibernate uses a 'Dynamic Proxy' class at runtime. This Dynamic Proxy is a class that inherits from your class. Then, as far as I understand, the instance of the class should be initialized lazily / on-demand. In some cases, this should be better for performance (at least, that's what's being told).
But, since I do not like that NHibernate tells me how my class should look like, I've always specified lazy=false for all my classes, and I haven't ran into trouble yet. :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With