4

私はEntity Frame作業を使用しており、fallowingはコンテキスト作成メソッドです。これが呼び出されるたびに外部キーを有効にしましたが、驚いたことに値変数は常に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を使用しています

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 の Web サイト で入手可能な最新バージョンにアップグレードすると、正しく動作する可能性が高くなります。

于 2012-07-29T14:48:03.633 に答える