【问题标题】:SQLite Error 19: 'FOREIGN KEY constraint failed'SQLite 错误 19:“外键约束失败”
【发布时间】:2021-12-28 20:03:28
【问题描述】:

我正在开发一个 C# 应用程序,并且我正在使用实体框架来处理数据库。 我的项目中有以下数据库设计:

每当我尝试删除“rentals”表中的一行时,都会收到“Foreign Key Constraint Failed”错误,但我不知道为什么。

我的出租表迁移如下所示:

    migrationBuilder.CreateTable(
    name: "Rentals",
    columns: table => new
    {
        Id = table.Column<int>(type: "INTEGER", nullable: false)
            .Annotation("Sqlite:Autoincrement", true),
        CustomerId = table.Column<int>(type: "INTEGER", nullable: false),
        ProductsId = table.Column<int>(type: "INTEGER", nullable: false),
        DateAssigned = table.Column<DateTime>(type: "TEXT", nullable: false),
        Active = table.Column<bool>(type: "INTEGER", nullable: false)
    },
    constraints: table =>
    {
        table.PrimaryKey("PK_Rentals", x => x.Id);
        table.ForeignKey(
            name: "FK_Rentals_Customers_CustomerId",
            column: x => x.CustomerId,
            principalTable: "Customers",
            principalColumn: "Id");
        table.ForeignKey(
            name: "FK_Rentals_Products_ProductId",
            column: x => x.ProductId,
            principalTable: "Products",
            principalColumn: "Id");
    });    

modelBuilder.Entity("API.Entities.Rentals", b =>
    {
        b.HasOne("API.Entities.Customer", "Customer")
            .WithMany("Rentals")
            .HasForeignKey("CustomerId")
            .OnDelete(DeleteBehavior.NoAction)
            .IsRequired();

        b.HasOne("API.Entities.Product", "Product")
            .WithMany("Rentals")
            .HasForeignKey("ProductId")
            .OnDelete(DeleteBehavior.NoAction)
            .IsRequired();

        b.Navigation("Customer");

        b.Navigation("Product");
    });

关于我做错了什么有什么想法吗?

【问题讨论】:

  • 倾向于正确调试。捕获 SQL,然后在 SSMS 中执行它并获取完整的错误消息。错误中的内容比您告诉我们的要多,并且它在 VS 中也可见(在异常中),除非您忽略它。查看异常的所有属性。
  • @TomTom - “你的 SQLite 客户端”而不是 SSMS?
  • 啊,忽略了。不确定他们使用什么,但获取发送到数据库的 SQL 并查看 INNNER EXCEPTIONS。有更多可用信息。
  • 当外键约束失败时,通常是因为您依赖于在 Rentals 上找到的主键,这意味着您可能没有在设计中向我们展示关系。在您重新启动并遇到错误之间,您可能删除了另一行,该行从该行的租金中引用了此 FK。这可以解释你描述的行为。但不是“必须”成为问题。我不知道 ORM 会在外键约束这样重要的东西上“出故障”。这将使该软件对公司毫无用处

标签: c# sqlite entity-framework


【解决方案1】:

好像有问题。

重启VS后,错误不再出现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2020-10-18
    • 1970-01-01
    相关资源
    最近更新 更多