2016-10-26 13 views
3

外部キー制約は、私は、テーブル内のリレーションEntity FrameworkコアSQLiteデータベースの外部キー制約を無視する方法?

[Table("organizations")] 
public class Organizations 
{ 
    [Column("id")] 
    public int Id { get; set; } 

    [Column("parent_id")] 
    [ForeignKey("id")] 
    public int? ParentId { get; set; } 

    [Column("person_id")] 
    public int? PersonId { get; set; } 
} 


public DbSet<Organizations> Organizations { get; set; } 

using (var db = new SQLiteDbContext($"Filename={dbPath};")) 
{ 
    db.Database.ExecuteSqlCommand("PRAGMA foreign_keys=OFF;"); 
    db.Database.ExecuteSqlCommand("PRAGMA ignore_check_constraints=true;"); 
    db.Organizations.AddRange(organizationsResult.Rows); 
} 

を持つEntity Frameworkのコア

で使用SQLiteのに失敗した私はSqliteをデータベースからのエラーが表示されます。

{ "SQLiteのエラー19:" FOREIGN KEY制約に失敗しました ''}

答えて

2

接続が終了すると、PRAGMAは効果を失います。前後にdb.Database.OpenConnection()CloseConnection()を呼び出すことによって、接続の有効期間を長くする必要があります。

また、optionsBiulder.UseSqlite(connectionString, x => x.SuppressForeignKeyEnforcement())に電話すると、EFが接続ごとに自動的に外部キーの適用を行わないようにすることもできます。

+0

ありがとうございます。 – themoretheless

関連する問題