Ignorar los campos públicos/internos para el proxy NHibernate
fluent-nhibernate f# (5)
Tengo algunos tipos de entidades que me gustaría cargar perezosamente. Sin embargo, tienen algunos campos internos (ensamblados) que exponen, pero no se usan fuera de esa clase. Estos campos son generados por el compilador (F #) y no puedo cambiarlos. La excepción de un ejemplo es:
NHibernate.InvalidProxyTypeException: los siguientes tipos no se pueden usar como proxies: Mappings.MTest: field id @ 47 no debe ser público ni interno
Entiendo por qué NHibernate está haciendo esto y cómo tener campos, si accediera a ellos, estropearía las propiedades de carga lenta de los proxies que se generan. Sin embargo, como sé que no usaré los campos, ¿puedo anular el NHibernate de alguna manera?
¿Hay alguna manera de que pueda decir "ignorar este campo"? Estoy usando Fluido NHibernate, si eso lo hace más fácil.
Edit: También debo tener en cuenta, estoy usando NHibernate 2.1.0 Alpha 2.
Edit2: La idea principal aquí es que quiero mantener habilitado a LazyLoading, lo que significa que tengo que usar la generación de proxy. La desactivación de LazyLoading funciona (no hay proxies), pero no tiene nada que ver con el propósito de un marco agradable como NHibernate.
¿Se puede usar una interfaz para declarar los campos "usados"? http://nhibernate.info/doc/nh/en/index.html#persistent-classes-poco-sealed
"Otra posibilidad es que la clase implemente una interfaz que declare a todos los miembros públicos"
No sé si NH usa la misma anotación / atributo @transient como la versión JAVA para ignorar una propiedad en operaciones persistentes.
Puedes usar el
[XmlIgnore]
atributo para decorar los campos :)
Reensamblado NHibernate (más fácil que obtener la fuente y reconstruir) y eliminé el código que los errores en los campos internos / públicos. LazyLoading parece funcionar bien sin esa comprobación. (Aunque, soy nuevo en NHibernate y probablemente haya escenarios que no conozco).
Edición: Ah, hay una propiedad, "use_proxy_validator" que deshabilitará todas las comprobaciones de validación. Suficientemente bueno.
Fluently.Configure()
.ExposeConfiguration(fun cfg ->
cfg.Properties.Add("use_proxy_validator", "false"))...
Sólo establece la propiedad perezosa en falso,
<class name="OrderLine" table="OrderLine" lazy="false" >
Puedes leer más en: Must Everything Be Virtual With NHibernate? - http://davybrion.com/blog/2009/03/must-everything-be-virtual-with-nhibernate/
Ofir, www.TikalK.com
Es posible que desee echar un vistazo a esta página que ofrece una descripción general del uso de F # con Fluent NHibernate.
Editar Me acabo de dar cuenta de su nombre de usuario. ¿Estoy en lo correcto al pensar que este es tu blog? Qué tonto de mi parte. Sin embargo, parece que aborda su problema, específicamente "Comenzamos por deshabilitar LazyLoad porque la mayoría de las propiedades no son virtuales, y NHibernate no podrá validar el mapeo. En su lugar, explícitamente lo hacemos, como la referencia de la Tienda". Tal vez solo estoy malinterpretando el problema.