【问题标题】:enabling SQLite foreignkeys in nhibernate在 nhibernate 中启用 SQLite 外键
【发布时间】:2011-05-01 18:12:58
【问题描述】:

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

PRAGMA foreign_keys = ON;

但不幸的是,如果我理解正确,我将不得不在每个会话开始时执行该查询。我对么? 如何使用 NHibernate“自动”完成它?有没有办法连接到 NH 并在打开会话后立即执行? 我正在使用 NH 3.0。

【问题讨论】:

    标签: nhibernate sqlite foreign-keys


    【解决方案1】:

    好的,我找到了适合我的答案。致谢 James Kovacs (similar question)

    我基于 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();
                }
            }
        }
    

    像魅力一样工作:)。

    【讨论】:

    • 是的,我应该,我会在两天后 stackoverflow 允许我:)。
    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 2015-09-22
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多