作者:索马里7_244 | 来源:互联网 | 2023-02-06 11:13
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);