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;
}

我想对删除功能进行级联,但由于未设置外键约束,我无法获得它

我将 SQLite 3.6.23.1 与 ado.net 提供程序一起使用

4

1 回答 1

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 提供商,但我不能做出承诺。如果您升级到SQLite 网站上提供的最新版本,您会增加它正常工作的几率。

于 2012-07-29T14:48:03.633 回答