带导航的存储库插入 属性 抛出 'FOREIGN KEY constraint failed'

Repository insert with navigation property throws 'FOREIGN KEY constraint failed'

我正在使用 EF Core 和 sqlite。给定以下 1 对 1 实体:

  public class Entity1:FullAuditedEntity<int>
  {
    public Entity2 Entity2 { get; set; }

    public string Name { get; set; }

  }

  public class Entity2: FullAuditedEntity<int>
  {

    public string Name { get; set; }       

    [ForeignKey("Entity1Id")]
    public Entity1 Entity1{ get; set; }
    public int Entity1Id { get; set; }
  }

和以下插入逻辑:

    entity1.Entity2 = new Entity2();
    entity1= await entity1Repository.InsertAsync(entity1);//entity1Repository is of type IRepository<Entity1>

上面的代码抛出:

Microsoft.EntityFrameworkCore.DbUpdateException:更新条目时出错。有关详细信息,请参阅内部异常。 ---- Microsoft.Data.Sqlite.SqliteException:SQLite 错误 19:'FOREIGN KEY constraint failed'。 在...

这个方法也不行,抛出同样的:

    var entity2 = new Entity2();
    entity1.Entity2 = entity2;
    entity2.Entity1 = entity1;
    entity1= await entity1Repository.InsertAsync(entity1);//entity1Repository 

我做错了什么,我错过了什么?在设置 Entity2 属性 的情况下创建 Entity1 和 Entity2 的正确方法是什么?是否可以仅使用 Entity1 存储库创建?

提前致谢。

更新:问题已解决。在实际代码中,entity2 对 entity3 有自己的引用,这显然是错误的。这是原因。

像这样?

public class Entity1:FullAuditedEntity<int>
{
   public Entity2 Entity2 { get; set; } = new Entity2();

   public string Name { get; set; }    
}

var entity1 = new Entity1();
entity1 = await entity1Repository.InsertAsync(entity1);//entity1Repository

或者你想克隆?查看: https://entityframeworkcore.com/knowledge-base/48873716/how-to-deep-clone-copy-in-ef-core

请参阅我的 post 中的更新 -- 有其他实体违反了 fk 约束。谢谢大家抽出时间。