Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ignore public/internal fields for NHibernate proxy

I have some entity types that I would like to lazy load. However, they have some internal (assembly) fields they expose, but are not used outside that class. These fields are compiler generated (F#) and I cannot change them. The an example exception is:

NHibernate.InvalidProxyTypeException: The following types may not be used as proxies: Mappings.MTest: field id@47 should not be public nor internal

I understand why NHibernate is doing this, and how having fields, if I accessed them, would mess up the lazy-loading properties of the proxies that are generated. However, since I know I won't be using the fields, can I override NHibernate somehow?

Is there any way I can say "ignore this field"? I'm using Fluent NHibernate, if that makes it easier.

Edit: I should also note, I'm using NHibernate 2.1.0 Alpha 2.

Edit2: The main gist here is that I want to keep LazyLoading enabled, which means I have to use the proxy generation. Disabling LazyLoading works (no proxies), but sorta defeats the purpose of a nice framework like NHibernate.

like image 970
MichaelGG Avatar asked Apr 12 '09 09:04

MichaelGG


1 Answers

I reassembled NHibernate (easier than getting the source and rebuilding) and removed the code that errors on internal/public fields. LazyLoading appears to work just fine without that check. (Although, I'm new to NHibernate and so there are probably scenarios I don't know about.)

Edit: Ah, there is a property, "use_proxy_validator" that will disable all validation checks. Good enough.

Fluently.Configure()
    .ExposeConfiguration(fun cfg -> 
        cfg.Properties.Add("use_proxy_validator", "false"))...
like image 112
MichaelGG Avatar answered Nov 10 '22 19:11

MichaelGG