c# - SQLite 外键未被激活

标签 c# .net entity-framework-4 sqlite system.data.sqlite

我正在使用 Entity Frame 工作,闲置是我的创建上下文方法,每当调用它时我都启用了外键但令我惊讶的是值变量始终为 0

private static DataBaseEntity CreateContext()
{
    var context = new DataBaseEntity("name=DataBaseEntity");
    context.ExecuteStoreCommand("PRAGMA foreign_keys = ON");

    var value = context.ExecuteStoreCommand("PRAGMA foreign_keys");
    return context;
}

我想要级联删除功能,但我无法获得它,因为没有设置外键约束

我正在使用带有 ado.net 提供程序的 SQLite 3.6.23.1

最佳答案

打开外键仅在数据库连接的生命周期内有效。默认情况下,ObjectContext 将打开连接并在您与数据库交互时将其关闭,这是通过调用 SaveChanges()ExecuteStoreCommand(),否则。如果您不希望出现这种情况,则必须手动打开连接,最好在使用完 ObjectContext 对象后将其关闭。

我自己更喜欢在连接字符串中打开外键,这样我就不必担心上述任何问题。

例如,在您的 app.config 文件中,您会有这样的内容(在 connectionString 属性的末尾查找 foreign keys=True):

<configuration>
  <connectionStrings>
    <add name="DataBaseEntity"
         connectionString="metadata=res://*/m.csdl|res://*/m.ssdl|res://*/m.msl;provider=System.Data.SQLite;provider connection string=&quot;data source=C:\foo.db;foreign keys=True&quot;" 
         providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

我认为这应该适用于您的 ADO .Net 提供商,但我不能做出 promise 。如果升级到 latest version available on SQLite's website ,您会增加它正常工作的几率。

关于c# - SQLite 外键未被激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11664146/

相关文章:

c# - 使用 Moq 中的任何结构参数验证方法调用

c# - 我如何让这个数据集添加我的新行并正确更新?

c# - 分层架构中的 Entity Framework

.net - 形式成为焦点

c# - Entity Framework 检索不同的实例

.net - 将 WinForm 控件绑定(bind)到相关实体

c# - 等待的任务没有优雅地处理异常

c# - 大型 c# 解决方案中的配置文件

.net - 确定Word单元格是否合并

c# - C# 编译器或 JIT 在什么级别优化应用程序代码?