2016-08-31 6 views
-1

私はwebapiプロジェクトでefを使用しています。関数Aでは、1つのエンティティのプロパティAを変更します。関数BはプロパティBを変更します。同時に、私は唯一のプロパティが変更されていた、あなたは両方の方法で1つのコンテキストを使用する必要があります私はすべての成功確認のポストだが、どのように私はこれらの2EFは同時に1行を更新します

​​
+0

あなたの関数Aと関数Bはどこですか?あなたもそれらを置くことができますか? – Sampath

+0

@Sampath以下の答えは私が意味することですが、AとBは同じですが、エンティティの異なる小道具を変更します。私もそれを解決しました。 – Nico

答えて

1

を変更することができます。 db.Entry(member).State = EntityState.Modified;も使用しないでください。すべてのプロパティの更新ステートメントが生成されるためです。代わりにdb.Entry(member).Property("PropertyName").IsModified = true;を使用してください。 context.Configuration.AutoDetectChangesEnabled == trueの場合、変更するコンテキストからデータを取得すると、それらを使用する必要はありません。

public void FunctionA(DbContext context, int openid) 
{ 
    var member = db.Members.Find(openid); 
    member.A=a; 
    db.Entry(member).Property("A").IsModified = true; 
} 

public void FunctionB(DbContext context, int openid) 
{ 
    var member = db.Members.Find(openid); 
    member.B=b; 
    db.Entry(member).Property("B").IsModified = true; 
} 

は次にように、1つのコンテキストのために、この方法の両方とSaveChangesを呼び出します。

using (NielsenPMContext db = new NielsenPMContext()) 
{ 
    FunctionA(db, openid); 
    FunctionB(db, openid); 

    db.SaveChanges(); 
} 

注:エンティティフレームワークはローカルコンテキストからそれを取得するためは、二回Find方法を使用して恐れてはいけません最初の時間の後にデータベースの代わりに。または、会員になり、FunctionAFunctionBに送信することは素晴らしいでしょう。そして、私は、異なる方法でABのメンバーを変更する必要があると考えています。

+0

Ty、私は 'db.Entry(member).Property( "PropertyName")をテストします。IsModified = true;' 、それは私のために働く、ありがとう! – Nico

+0

@RuruXiang、あなたは歓迎です –

関連する問題