включение внешних ключей SQLite в nhibernate - PullRequest
1 голос
/ 01 мая 2011

Я узнал, что единственный способ включить ограничения FK в sqlite - включить эту прагму:

PRAGMA foreign_keys = ON;

Но, к сожалению, если я правильно понял, мне придется выполнить этот запрос вначало каждой сессии.Я прав?Как я могу сделать это "автоматически" с NHibernate?Есть ли способ подключиться к NH и выполнить это сразу после открытия сессии?Я использую NH 3.0.

1 Ответ

7 голосов
/ 02 мая 2011

Хорошо, я нашел ответ, который работает для меня.Кредиты идут Джеймсу Ковачу ( аналогичный вопрос )

Я создал свой собственный драйвер на основе SQLite20Driver и перегружен метод CreateConnection (код из James 'GitHub )

public override IDbConnection CreateConnection()
    {
        DbConnection connection = (DbConnection)base.CreateConnection();
        connection.StateChange += Connection_StateChange;
        return connection;
    }

    private static void Connection_StateChange(object sender, StateChangeEventArgs e)
    {
        if ((e.OriginalState == ConnectionState.Broken || e.OriginalState == ConnectionState.Closed || e.OriginalState == ConnectionState.Connecting) &&
            e.CurrentState == ConnectionState.Open)
        {
            DbConnection connection = (DbConnection)sender;
            using (DbCommand command = connection.CreateCommand())
            {
                // Activated foreign keys if supported by SQLite.  Unknown pragmas are ignored.
                command.CommandText = "PRAGMA foreign_keys = ON";
                command.ExecuteNonQuery();
            }
        }
    }

Работает как шарм:).

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