在nhibernate中启用SQLite foreignkeys

ppi*_*icz 1 sqlite nhibernate foreign-keys

我已经了解到在sqlite中启用FK约束的唯一方法是打开这个pragma:

PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)

但不幸的是,如果我理解正确,我将不得不在每个会话开始时执行该查询.我对么?我怎么能用NHibernate"自动"做到这一点?有没有办法挂钩NH并在打开会话后立即执行?我正在使用NH 3.0.

ppi*_*icz 7

好的,我找到了适合我的答案.积分归詹姆斯科瓦奇(类似问题)

我已经创建了自己的驱动程序基于SQLite20Driver和重载创建连接方法(代码是从詹姆斯的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();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

奇迹般有效 :).