我了解到在sqlite中启用FK约束的唯一方法是启用此编译指示:
PRAGMA foreign_keys = ON;
但不幸的是,如果我理解正确,我将不得不在每个会话开始时执行该查询。我对么? 我怎么能用NHibernate“自动”做到这一点?有没有办法挂钩NH并在打开会话后立即执行? 我正在使用NH 3.0。
答案 0 :(得分:7)
好的,我找到了适合我的答案。积分归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();
}
}
}
像魅力一样:)。