热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

EF核心/Sqlite一对多关系由于唯一索引约束而失败

如何解决《EF核心/Sqlite一对多关系由于唯一索引约束而失败》经验,为你挑选了1个好方法。



1> Ivan Stoev..:

问题在于Add方法会级联:

开始跟踪给定的实体以及尚未被跟踪的其他任何可达实体,Added状态为在SaveChanges调用它们时将其插入数据库中。

有很多方法可以实现目标,但是最灵活的方法(我想是首选)是用Add方法替换方法调用ChangeTracker.TrackGraph

通过遍历其导航属性开始跟踪一个实体以及所有可到达的实体。遍历是递归的,因此任何发现的实体的导航属性也将被扫描。将为每个发现的实体调用指定的回调,并且必须设置应跟踪每个实体的状态。如果未设置状态,则该实体将保持未跟踪状态。 此方法设计用于断开连接的场景,在该场景中,使用上下文的一个实例检索实体,然后使用上下文的另一个实例保存更改。一个示例是Web服务,其中一个服务调用从数据库中检索实体,而另一个服务调用保留对实体的任何更改。每个服务调用都使用一个新的上下文实例,该实例在调用完成后就被释放。如果发现上下文已经跟踪的实体,则不会处理该实体(并且不会遍历其导航属性)。

因此,context.Cars.Add(car2);您可以使用以下方法(它非常通用,并且几乎可以在所有情况下使用):

context.ChangeTracker.TrackGraph(car2, node =>
    node.Entry.State = !node.Entry.IsKeySet ? EntityState.Added : EntityState.Unchanged);


推荐阅读
author-avatar
索马里7_244
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有