2016-06-19 9 views
0

LINQ to SQL(DBML)を使用してEntity/Modelを更新しようとしています。私はそれをすることができません。異なるデータコンテキストからのLINQ to SQL(DBML)更新エンティティ

ここに私のコードスニペットがあります。

public void Update(Customer customer) 
{ 
    using (MyDataContext db = new MyDataContext()) 
    { 
     db.Customers.Attach(customer, true); 
     db.SubmitChanges(); 
    } 
} 

public Customer GetByID(int ID) 
{ 
    using (MyDataContext db = new MyDataContext()) 
    { 
     return db.Customers.FirstOrDefault(c => c.CustomerID == ID); 
    } 
} 

私のシナリオは次のとおりです。カスタマーオブジェクトを取得し、顧客オブジェクトをフォームにバインドします。フォーム入力データを変更した後。データは完全に変更されますが、私はupdateメソッドを呼び出します。更新中ではありません。このエラーがあります:

An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy.

私は多くのインターネットを検索しましたが、適切な解決策を見つけることができません。

public void Update(Customer customer) 
{ 
    using (MyDataContext db = new MyDataContext()) 
    { 
     var originalCustomer = db.Customers.FirstOrDefault(c => c.CustomerID == customer.CustomerID); 
     db.Customers.Attach(customer, originalCustomer); 
     db.SubmitChanges(); 
    } 
} 

でも、同じエラーが表示されます。

私はデータベースから顧客を取得し、パラメータ顧客プロパティからプロパティを更新したくありません。私は、同じパラメータの顧客を使用し、それをデータベースで更新したい。

私を助けてください。 ありがとう!

答えて

-1
public void Update(Customer customer) 
{ 
using (MyDataContext db = new MyDataContext()) 
{ 
    var originalCustomer = db.Customers.Where(c => c.CustomerID == customer.CustomerID).FirstOrDefault(); 
    // change the originalCustomer's properties with customer's properties. 
    db.SubmitChanges(); 
} 
} 
+0

を必要なときにそれを使用することであろう2つの異なるコンテキスト に簡単にオプションを与え、あなたはステートメントを使用して2つを持っている、私はしたくありませんデータベースから顧客を取得し、プロパティを更新します。説明をお読みください。 どのように、あなたの答えをありがとう。 – Saadi

+0

Attach()を使用する理由を理解できませんが、attach()メソッドを使用する場合は、savechanges().https://msdn.microsoft.com/en-us/data/の前にentityのプロパティを変更する必要があります。 jj592676.aspx – Mehmet

+0

パラメータとして渡される顧客のモデルオブジェクトを変更しました。 – Saadi

0

あなたは文を「使用」とは、異なる2を使用しているため、問題は、あなたが別のDbContext オブジェクトにを使用しているあなたが同じDbContext クラスを使用しているにもかかわらず、ということです。

リクエスト全体で同じDbContextオブジェクトを使用することが重要です(MVCアプリケーションの場合)。

通常の方法は、コントローラ内で(または依存関係注入を使用して)DbContextをインスタンス化し、参照をどこからでも使用することです。

0

問題がコントローラに注入し、私は私の説明で述べたように

関連する問題