将代码添加到Entity Framework 6模型,该模型在实例化新模型上下文时运行

时间:2014-12-23 15:24:46

标签: c# entity-framework sqlite entity-framework-6

我正在使用EF6和最新版本的SQLite EF6提供程序。每当实例化新模型上下文并打开连接时,我都需要执行PRAGMA语句。

EF6有一些允许我这样做的机制吗?或者我是否会在模型用于检查PRAGMA并将其设置为所需值的任何地方修改我的代码?请注意,没有与此PRAGMA对应的​​连接字符串属性,或者我在那里执行。

修改 为了完整性,这不是代码优先模型。这是数据库的第一个模型。我知道上下文类是部分的。可以在上下文的部分文件中添加自定义构造函数,然后我只需要调用它而不是默认的构造函数吗?

1 个答案:

答案 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}}