gpt4 book ai didi

c# - Entity Framework 查询刚刚添加但未保存的值

转载 作者:太空狗 更新时间:2023-10-29 17:45:47 25 4
gpt4 key购买 nike

几年前我一直在使用 Entity Framework,但现在遇到了一些小问题。

我向表中添加了一个实体

Entities.dbContext.MyTable.Add(obj1);

好了。

然后,我想在 MyTable 上进行查询,例如

Entities.dbContext.MyTable.Where(.....)

上面的代码将在数据库中查询我的 MyTable。

有没有办法在saveChanges之前也查询刚刚添加的值? (obj1) 如何?

更新

为什么我需要这个?因为,对于我添加的每个新元素,我需要编辑上一条和下一条记录中的一些值(此表中有一个日期时间字段)

UPDATE2

假设我必须添加很多对象,但我仅在添加最后一个项目后才调用 saveChanges。每次我添加新项目时,我都会读取它的日期时间字段,并在数据库中搜索上一条和下一条记录。在这里,我编辑了上一条记录和下一条记录的字段。现在,问题来了:如果我插入另一个项目,例如,下一个项目是“Obj1”,我必须找到并编辑它,但我找不到它,因为我没有保存我的更改。现在更清楚了吗?

最佳答案

您应该能够像这样通过更改跟踪器从 dbContext 中获取添加的实体:

 var addedEntities = dbContext.ChangeTracker.Entries()
.Where(x => x.State == EntityState.Added && x.Entity is Mytable)
.Select(x => x.Entity as MyTable)
.Where(t => --criteria--);

或者使用 type testing with pattern matching in c# 7.0 :

var addedEntities = dbContext.ChangeTracker.Entries()
.Where(x => x.State == EntityState.Added && x.Entity is Mytable t && --test t for criteria--)
.Select(x => x.Entity as MyTable);

因为您只查询添加的实体,所以您可以将其与

dbContext.MyTable.Where(t => --criteria--).ToList().AddRange(addedEntities);

获取所有相关对象

关于c# - Entity Framework 查询刚刚添加但未保存的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40999392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com