/NHStaticProxy

This library uses power of Postsharp to deliver ability to not mark every property and method on an entity as virtual

Primary LanguageC#

This project allows you to use static proxies within NHibernate, thanks to PostSharp.

The benefits of using this project are:

1) No need to make all your entities have virtual properties / methods

2) Only the mapped properties / fields are altered by PostSharp

3) You know at compile time if:
	a) No mappings were found for an entity type (A warning is emitted)
	b) You didn't configure correctly the proxy

In order to get things work, you need to:

1) Reference NHibernate.StaticProxy from the assembly which contains the entities declarations

2) Create a new class in the same assembly, inheriting from NHibernate.StaticProxy.StaticProxyConfigurationAttribute
   This class must return a list of HbmMapping. There are several examples on how to derive this class in the NHibernate.StaticProxy.Examples project (using mapping by code, resources files, or Fluent NHibernate)

3) In the AssemblyInfo.cs file of the same assembly, add a reference to this class as an assembly attribute. For example : [assembly: ModelMapperStaticProxyConfigurationAttribute]

4) To make Postsharp wave your entities classes, there are several possibilities:
	a) Add [StaticProxyAttribute] on top of each of your entity classes
	b) If all of your entities derive from a common class, add [StaticProxyAttribute] on top of that class
	c) Reference [StaticProxyAttribute] as an assembly attribute in the AssemblyInfo.cs file of the project owning the entity classes: 
		
		[assembly: StaticProxy(AttributeTargetTypes = "NHStaticProxy.Tests.Entities.*",
							   AttributeTargetTypeAttributes = MulticastAttributes.Public,
							   AttributeTargetMemberAttributes = MulticastAttributes.Public)]

	   More infos here : http://doc.sharpcrafters.com/postsharp/2.0/##PostSharp.chm/html/1B05CE59-61DE-4043-8E7C-12C130B1ACBB.htm

Now, it's time to configure NHibernate, so it uses the custom StaticProxyFactoryFactory.

5) var configuration = new Configuration();
   configuration.Proxy(proxy => proxy.ProxyFactoryFactory<NHibernate.StaticProxy.StaticProxyFactoryFactory>());