SQLite外键未激活

Rag*_*ale 4 .net c# sqlite system.data.sqlite entity-framework-4

我正在使用实体框架工作,并且休息是我的创建上下文方法,我已经在调用时启用了外键,但令我惊讶的是,值变量始终为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;
}
Run Code Online (Sandbox Code Playgroud)

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

我正在使用SQLite 3.6.23.1与ado.net提供程序

小智 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>
Run Code Online (Sandbox Code Playgroud)

我认为这应该适用于您的ADO .Net提供商,但我不能做出承诺.如果您升级到SQLite网站上提供最新版本,您可以增加它正常工作的几率.