entity-framework - 带有导航属性的存储库插入抛出“外键约束失败”
问题描述
我正在使用 EF Core 和 sqlite。给定以下一对一实体:
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:“外键约束失败”。在 ...
这种方法也不起作用,抛出相同的:
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
推荐阅读
- kubernetes - Helm 的历史规模是否有限制?
- mysql - 我该如何进一步优化呢?
- java - 无法写入 JSON:无法访问 lob 流
- java - 如何使用 Java 中的描述符将协议缓冲区二进制文件转换为 JSON
- mysql - 一列中的外键数组
- python-2.7 - 如果使用 opencv 调整大小方法,pytorch 数据加载器会卡住
- python - 在csv python中写入for循环的输出
- reporting-services - ssrs 报告 - 文本框创建间隙空间
- google-analytics - GA 将“=”(等号)附加到 URL
- javascript - 将数据保存到我的网络中的 firebase 后无法重定向到另一个 html 文件