我正在使用实体框架工作,而且我的创建上下文方法,我已经启用了外键,但是为了我的意外,值变量始终为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;
}
我希望在删除功能上有级联,但我无法得到它,因为外键约束未设置
我正在使用SQLite 3.6.23.1和ado.net提供程序
答案 0 :(得分:9)
打开外键仅在数据库连接的生命周期内工作。默认情况下,只要您与数据库进行交互,ObjectContext
就会打开一个连接,并通过调用SaveChanges()
,ExecuteStoreCommand()
或其他方式将其关闭。如果您不想要此行为,则必须手动打开连接,并在完成ObjectContext
对象后理想地将其关闭。
我自己更喜欢在连接字符串中打开外键,这样我就不用担心上面提到的任何内容了。
例如,在您的app.config文件中,您会有类似这样的内容(在foreign keys=True
属性的末尾查找connectionString
):
<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提供商,但我不能做出承诺。如果您升级到latest version available on SQLite's website,则会增加它正常工作的几率。