簡體   English   中英

實體框架查詢剛剛添加但未保存的值

[英]Entity framework query on just added but not saved values

幾年來我一直在使用 Entity Framework,現在我遇到了一個小問題。

我在我的表中添加了一個實體,

Entities.dbContext.MyTable.Add(obj1);

好的。

然后,我想對 MyTable 進行查詢,例如

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

上面的代碼將在數據庫中查詢我的 MyTable。

有沒有辦法在saveChanges之前查詢剛剛添加的值? (obj1)如何?

更新

為什么我需要這個? 因為,對於我添加的每個新元素,我需要編輯上一條和下一條記錄中的一些值(此表中有一個日期時間字段)

更新2

假設我必須添加很多對象,但我僅在添加最后一個項目后才調用 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--);

或者在 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);

獲取所有相關對象

我認為這對 Transactions 來說是個好情況。 我假設您使用的是 EF 6,因為您沒有提供版本。 =)

UPDATE2 更改

public void BulkInsertObj(List<TEntity> objList)
{
    using (var context = new dbContext()) 
    { 
        using (var dbContextTransaction = context.Database.BeginTransaction()) 
        {  
            try 
            { 
                foreach(var obj1 in objList)
                {
                    dbContext.MyTable.Add(obj1);

                    //obj1 should be on the context now 
                    var previousEntity = dbContext.MyTable.Where(.....) //However you determine this
                    previousEntity.field = something

                    var nextEntity = dbContext.MyTable.Where(.....) //However you determine this
                    nextEntity.field = somethingElse
                }

                context.SaveChanges(); 
                dbContextTransaction.Commit(); 
            } 
            catch (Exception) 
            { 
                dbContextTransaction.Rollback(); 
            } 
        } 
    } 
}

MSDN EF6 事務

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM