22

Entity Framework 4.0 を使用しています。SaveChanges()0 を返すが、例外をスローしない可能性はありますか? たとえば、追加した後。

これが私のコードです:

try
{
    _context.CodeProducts.Add(entity);
    _context.SaveChanges();

    //Shell I control return result from SaveChanges() in here.
    //However doesn't throw an exceoption?

    return new MethodResponse()
    {
        ResultText = "Successful",
        Type = MethodResponse.ResponseType.Succeed
    };
}
catch (OptimisticConcurrencyException exc)
{
    throw exc;
}
catch (UpdateException exc)
{
    throw exc;
}
catch (Exception exc)
{
    throw exc;
}
4

4 に答える 4

33

ドキュメントによると、の戻り値DbContext.SaveChanges

基礎となるデータベースに書き込まれたオブジェクトの数。

したがって、エンティティをデータベースに保存する必要がない場合にのみ、表示が可能になります。

于 2012-06-19T08:53:32.367 に答える
4

Entity Framework のdb.SaveChanges()削除と保存は、影響を受ける行数を返します。ただし、Fakes フレームワーク (スタブとシム) を使用したテストでは、返される値は常に 0 です。

呼び出しにエラーがある場合は、例外がスローされます。つまり、確認のために から返されたゼロより大きい値に依存する呼び出しメソッドはdb.SaveChanges()、同じ値についてテストできないということです。

これは、メソッドがdb.SaveChanges()戻り値を使用して、特定の操作で影響を受ける行数を評価する場合に重要になる場合があります。

于 2014-06-30T18:10:00.507 に答える
0

私の答えは について言及していませんDbContextが、誰かがXEntities同じ問題を使用して取得している場合は、次を試すことができます。

using (var entities = new XEntities())
{
    var product = entities.Products.SingleOrDefault(x => x.Id == id);
    product.Type = "New type"; // modifying

    int flag = entities.SaveChanges(); // 1
    // or await entities.SaveChangesAsync(); // 1
}

問題:

public class Demo
{
    private XEntities _entities = new XEntities();

    public void Test(int id)
    {
        var product = _entities.Product.SingleOrDefault(x => x.Id == id);
        product.Type = "New type"; // modifying

        int flag = _entities.SaveChanges(); // 0 <<<====
        // or await entities.SaveChangesAsync(); // 0  <<<====

        // you need to create new instance of XEntities to apply changes
    }
}
于 2016-12-23T04:56:58.740 に答える