If you use NHibernate with MySQL and Linq 2 NHibernate to simplify fetching data you may face with problem: queries created by Linq2NH use square brackets by default. That is fine for SQL Server but won't work in MySQL which uses backticks ``.
For MySQL we need to instruct NHibernate to use backticks instead of square brackets. It can be done by setting interceptor in NH config:
public class NHConfiguration { public static Configuration Build(string connStr) { var config = Fluently.Configure() .Database( MySQLConfiguration.Standard .ConnectionString(connStr) .AdoNetBatchSize(100) .DoNot.ShowSql() ) .Mappings(cfg => { // add mappings }) .ExposeConfiguration(x => { with backticks for MySQL x.SetInterceptor(new ReplaceBracesWithBackticksInterceptor()); }); return config.BuildConfiguration(); } }
in its OnPrepareStatement method we just replace square brackets with backticks:
public class ReplaceBracesWithBackticksInterceptor : EmptyInterceptor { public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql) { return sql.Replace("[", "`").Replace("]", "`"); } }
After that Linq2NH will start working in MySQL.
No comments:
Post a Comment