在nhibernate中启用SQLite外键

在nhibernate中启用SQLite外键,nhibernate,sqlite,foreign-keys,Nhibernate,Sqlite,Foreign Keys,我了解到,在sqlite中启用FK约束的唯一方法是启用以下pragma: PRAGMA foreign_keys = ON; 但不幸的是,如果我理解正确,我将不得不在每次会话开始时执行该查询。我说得对吗? 我如何用NHibernate“自动”完成它?有没有一种方法可以挂接NH并在会话开始后立即执行? 我正在使用NH3.0。好的,我找到了适合我的答案。詹姆斯·科瓦奇() 我已经基于SQLite20Driver和重载的CreateConnection方法创建了自己的驱动程序(代码来自) 很有魅力:

我了解到,在sqlite中启用FK约束的唯一方法是启用以下pragma:

PRAGMA foreign_keys = ON;
但不幸的是,如果我理解正确,我将不得不在每次会话开始时执行该查询。我说得对吗? 我如何用NHibernate“自动”完成它?有没有一种方法可以挂接NH并在会话开始后立即执行?
我正在使用NH3.0。

好的,我找到了适合我的答案。詹姆斯·科瓦奇()

我已经基于SQLite20Driver和重载的CreateConnection方法创建了自己的驱动程序(代码来自)


很有魅力:)。

好的,我找到了适合我的答案。詹姆斯·科瓦奇()

我已经基于SQLite20Driver和重载的CreateConnection方法创建了自己的驱动程序(代码来自)


工作起来就像一个符咒:)。

是的,我应该,两天后stackoverflow会允许我:)。是的,我应该,两天后stackoverflow会允许我:)。
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();
            }
        }
    }