我正在使用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:“ FOREIGN KEY约束失败”。在...
此方法也不起作用,抛出相同的内容:
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
请参阅我的帖子中的更新-还有其他实体违反了fk约束。谢谢大家的时间。