c# – 如何忽略Entity Framework Core SQLite数据库中的外键约束?

外键约束失败使用sqlite和Entity Framework Core

我在桌子上有关系

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

我从sqlite数据库收到错误

{“sqlite Error 19: ‘FOREIGN KEY constraint Failed'”}

解决方法:

如果连接关闭,PRAGMA会失效.您需要通过在之前和之后调用db.Database.OpenConnection()和CloseConnection()来增加连接的生命周期.

您还可以调用optionsBiulder.Usesqlite(connectionString,x => x.SuppressForeignKeyEnforcement())来防止EF在每个连接上自动转换外键执行.

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能