我正在使用 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="data source=C:\foo.db;foreign keys=True""
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/