SQLite外键未激活

时间:2012-07-26 07:06:49

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

我正在使用实体框架工作,而且我的创建上下文方法,我已经启用了外键,但是为了我的意外,值变量始终为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提供程序

1 个答案:

答案 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=&quot;data source=C:\foo.db;foreign keys=True&quot;" 
         providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

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