1

EntityState.Modifiedを使用してさまざまな関連テーブルでフィールドを更新しようとしていますが、SaveChanges()は変更を適用していません。私はlocalhost/8000/api/co/1に投稿するためにpostmanを使用しています。ステータスには202が受け入れられます。私のリポジトリはレコードを返していますが、まったく変更されていません。Entity Framework 7を使用してレコードを更新する方法は?

質問変更が反映されるために私のリポジトリには何が欠けていますか? 各プロパティを個別に設定する必要はありますか? (私は何百もあります)

リポジトリパターンとエンティティフレームワーク7に関するほとんどの例は、EntityState.Modified()を利用して変更を保存するだけです。誰かが私が行方不明を指摘するのを手伝ってもらえますか?私はあなたがすべてのエンティティに変更を加えることは、実際にどこ私は見ていない私の他のリポジトリが作成正常に動作してい、削除してうまく

マイリポジトリ

public COMP Update(int id) 
{ 
    var original = _context.Complaints.Where(c => c.COMP_ID == id).FirstOrDefault<COMPLAINT>(); 
    _context.Entry(original).State = EntityState.Modified; 
    SaveAll(); 
    return original; 
} 

public bool SaveAll() 
{ 
    return _context.SaveChanges() > 0; 
} 
+0

1.プロパティ変更のようにオブジェクトに何も割り当てないこと。 2.一度取得されたインスタンスはデフォルトで追跡されるため、状態の変更は必要ありません。 – Igor

答えて

1

作業得ます。あなたは、元のエンティティを引っ張っても、あなたの変更を行い、その後、それらをコミットするSaveChanges()を呼び出す必要があります:上記のシナリオで

public COMP Update(int id, string name) 
{ 
    // Grab your entity 
    var original = _context.Complaints.FirstOrDefault(c => c.COMP_ID == id); 
    // Make your changes here (using a parameter) 
    original.Name = name; 
    // Save your changes 
    SaveAll(); 
    // Return your original entity with the changes made 
    return original; 
} 

、あなたは、パラメータとして、この特定のエンティティを更新するために郵便配達を使用してidに渡され、nameとしましょう(例えば、このメソッドは単に名前を更新すると仮定します)。あなたがそれを行う場合

、その後、次のような既存のエンティティを更新するためにnameパラメータを使用することができます。

// Make your changes here (using a parameter) 
original.Name = name; 

を次に、実際にデータベースに更新を行いますSaveChanges()メソッドを呼び出します。

Change Tracking enabled on your contextがある場合は、手動で修正状態を設定することを心配する必要はありません。

+0

迅速な対応をありがとう!サンプルを提供するために答えを編集できますか?ここでコメントを変更して、チュートリアル/サンプルを調べるのを知っていますか?私は変更をハードコードするのではなく、郵便配達員またはウェブページからの値を受け入れることを望んでいます。 if(original!= null){original.value = this.value}のように見えますか?もしそうなら、私は何百もの価値を持っていますが、私は子供の価値さえもそれぞれに1つずつ作成しなければなりませんか? – epv

+0

どのようにデザインするかは、好みの問題です。更新を行っている場合は、モデルを表すオブジェクト(関連するすべてのフィールドを含む)を「ビルド」してから、「更新」を呼び出してこのモデルを渡すことが考えられます。メソッド自体の中で、モデルの 'id'プロパティを使って実際にエンティティを検索し、それぞれのプロパティをモデルの値に直接設定するか、変更されたかどうかを確認することができます。それは理にかなっていますか? –

+0

それは、私のメソッドはすでにエンティティメソッドを行っていたと思った。たとえば、元のエンティティをIDで見つけた後、entity.modifiedを使用してトラックの変更を確認してから保存した後、元の状態に戻って変更を確認しました。私は、変更部分がその仕事をしていると思ったので、私の変更部分を理解することを理解していないと思いますか?あなたはあなたのモデルを表現するための "建物"とオブジェクトについて詳しく教えてください。それはあなたが提供したサンプルですか? – epv

関連する問題