我正在使用EF6和最新版本的SQLite EF6提供程序。每当实例化新模型上下文并打开连接时,我都需要执行PRAGMA语句。
EF6有一些允许我这样做的机制吗?或者我是否会在模型用于检查PRAGMA并将其设置为所需值的任何地方修改我的代码?请注意,没有与此PRAGMA对应的连接字符串属性,或者我在那里执行。
修改 为了完整性,这不是代码优先模型。这是数据库的第一个模型。我知道上下文类是部分的。可以在上下文的部分文件中添加自定义构造函数,然后我只需要调用它而不是默认的构造函数吗?
答案 0 :(得分:1)
实际问题是,每次打开连接时都需要运行PRAGMA
,而不是在创建上下文时运行PRAGMA
。只有在连接打开后才能执行Open
语句或任何SQL语句。当您明确调用db.Connection.StateChange += ConnectionStateChange;
void ConnectionStateChange(object sender, System.Data.StateChangeEventArgs e)
{
if (e.CurrentState == System.Data.ConnectionState.Open)
db.ExecuteStoreCommand("PRAGMA foreign_keys = true;");
}
或隐式更改时,会发生这种情况。
您可以将事件处理程序附加到Connection.StateChange事件,如此SO question所示:
{{1}}