Is it possible to modify the SQL generated by NHibernate? Yes:
public class BadInterceptor : EmptyInterceptor, IInterceptor { SqlString IInterceptor.OnPrepareStatement(SqlString sql) { return doHorribleThingsToSqlString(sql); } private SqlString doHorribleThingsToSqlString(SqlString sql) { ... } } protected static readonly ISessionFactory SessionFactory = initialiseSessionFactory(); private static ISessionFactory initialiseSessionFactory() { var config = new Configuration(); config.AddAssembly(Assembly.GetExecutingAssembly()); config.SetInterceptor(new BadInterceptor()); return config.BuildSessionFactory(); }
Now don’t! :) Seriously, it’s evil.
If anyone knows a nice way to get NHibernate to add some custom SQL as part of it’s SQL generation process, rather than this brute-force approach, then please let me know. I was initially playing around with this code to add some calls to SQL Server’s binary_checksum()
function when loading and saving entities, and I’d be interested if this is possible to do in a reasonably robust way.