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