Как написать собственный диалект nHibernate? - PullRequest
0 голосов
/ 27 февраля 2010

Я использую NHibernate с устаревшим механизмом правил rdbms. Я использую GenericDialect , но некоторые сгенерированные sql не работают. Если мне нужно написать пользовательский диалект для этого правила, как запустить двигатель?

Ответы [ 2 ]

7 голосов
/ 03 марта 2011

Это пример диалекта:


using System;
using System.Collections.Generic;
using System.Web;

/// 
/// This class ensures that the tables created in our db are handling unicode properly.
/// 
public class NHibernateMySQL5InnoDBDialect : NHibernate.Dialect.MySQL5Dialect
{
    public override String TableTypeString { get { return " ENGINE=InnoDB DEFAULT CHARSET=utf8"; } }
}

Сборка, в которой она находится, имеет ссылку на NHibernate.dll

hibernate.cfg.dll (обратите внимание, что у меня здесь не установлено свойство 'connection.connection_string', это моя конкретная настройка, и обычно у вас будет строка подключения здесь):

<?xml version="1.0" encoding="utf-8"?>
<!-- This is the ByteFX.Data.dll provider for MySql -->
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="NHibernate.Test">
    <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
    <property name="dialect">NHibernateMySQL5InnoDBDialect, Assembly1</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
  </session-factory>
</hibernate-configuration>

В некоторых установках диалектная линия будет

<property name="dialect">Assembly1.NHibernateMySQL5InnoDBDialect, Assembly1</property>

И код, создающий ISessionFactory:


NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
cfg.Configure();
cfg.Properties["connection.connection_string"] = ConnectionStringForDatabase();
cfg.AddDirectory(PathToMappingsIfYouUseNonStandardDirectory);//not needed if using embedded resources
return cfg.BuildSessionFactory();
3 голосов
/ 27 февраля 2010

Я бы начал с захвата источника nhibernate, ветвь 2.1.x здесь . Все существующие диалекты находятся в разделе src / NHibernate / Dialect.

Скопируйте один и начните взламывать. Базовый класс Dialect имеет много точек расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...