8

ADO.NETでは、ExecuteNonQuery() "UPDATE、INSERT、およびDELETEステートメントの場合、戻り値はコマンドの影響を受ける行数です"(http://msdn.microsoft.com/en-us/library/system)。 data.sqlclient.sqlcommand.executenonquery.aspx

EF v1では、context.SaveChanges()メソッドは、「SaveChangesが呼び出されたときに、追加、変更、または削除された状態のオブジェクトの数」を返します。(http://msdn.microsoft.com/en-us/library/bb739065.aspx

複数のエンティティ(または単一のエンティティ)がコンテキストおよびcontext.SaveChanges()メソッドに追加または更新された場合、実際のINSERTまたはUPDATEが成功したかどうかを確認する方法を教えてください。

INSERT(s)またはUPDATE(s)が成功したという例外がなかったと仮定できますか?

ありがとうございました

4

4 に答える 4

13

はい、例外がない場合は、ステートメントが正常に実行されたと見なすことができます。

于 2009-08-25T22:52:23.530 に答える
3

EntityFrameworkで、 intSaveChangesAsync()を返します。だから、そうであるかどうかを確認することができます> 0

何かが起こった場合SaveChangesAsync()、影響を受けた行の数が返されます。これはif value > 0trueを意味します。簡単に言うと、以下のシーンリオを使用できます。

入れる

public Task<bool> CreateEntity(Entity entity){

    if(entity == null)
            return false;

    await _dataContext.Entities.AddAsync(entity);

    var created = await _dataContext.SaveChangesAsync();

    return created > 0;
}

アップデート

public async Task<bool> UpdateEntity(Entity entityToUpdate)
{
     if(entityToUpdate == null)
               return false;

     _dataContext.Posts.Update(entityToUpdate);

     var updated = await _dataContext.SaveChangesAsync();

     return updated > 0;
}

消去

public async Task<bool> DeleteEntity(int entityId)
{
     var entity = await _dataContext.Entities.FindAsync(entityId);

     if (entity == null)
             return false;

     _dataContext.Entities.Remove(entity);

     var deleted = await _dataContext.SaveChangesAsync();

     return deleted > 0;
}

そして、あなたのメソッドでは、その変更が成功したかどうかを簡単に確認できます。

単純なMVCシーンリオの場合:

public Task<IActionResult> CreateEntity(EntityModel model)
{
     if(model == null)
            return StatusCode(404);

     var entity = new Entity
     {
          attribute1 = model.attribute1,
          attribute2 = model.attribute3
     };

     var isCreated = await _entityService.CreateEntity(entity);

     if(isCreated)
     {
          //do something and return a view.
     }
     else
     {
         //you can return a status code, or an error view.
     }
}

更新と削除についても同じ方法を実行できます

于 2019-12-31T14:57:42.870 に答える
2

たぶん、これは質問に対する直接の答えではありませんが、役立つかもしれません。デフォルトでは、SaveChangesメソッドが呼び出されると、すべてのコマンドが1つのDbTransactionにカプセル化されます(Julia Lerman、Programming Entity Framework)。したがって、またはすべてのコマンドが正常に実行されるか、どちらも実行されません。これは、挿入、更新、または削除が成功したかどうかを知る1つの方法です。

于 2009-08-26T08:14:03.120 に答える
-1

変数SaveStatusを定義しますvarSaveStatus= context.SaveChanges()

次に、SaveStatus = 1の値を取得することで、作成が完了したかどうかを知ることができます。

「SaveStatus=0」の場合は、レコードが作成または影響を受けていないことを意味します

于 2021-11-03T12:11:30.623 に答える