2016-06-19 2 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

을 필요로 할 때 사용하는 것이 다른 문맥 에게 더 쉬운 옵션을 제공, 당신이 문을 사용하여 두 가지를 가지고, 난 싶지 않아 데이터베이스에서 고객을 얻고 속성을 업데이트하십시오. 설명을 읽으십시오. 어떤 방법으로 답변 해 주셔서 감사합니다. – Saadi

+0

Attach()를 사용하려는 이유를 모르겠지만 attach() 메서드를 사용하는 경우 savechanges() .https : //msdn.microsoft.com/en-us/data/보다 먼저 엔터티의 속성을 변경해야합니다. jj592676.aspx – Mehmet

+0

매개 변수로 전달되는 고객의 모델 객체를 변경했습니다. – Saadi

0

문제는 당신이 문을 "사용"서로 다른 두 가지를 사용하고 있기 때문에, 심지어 같은 DbContext 클래스를 사용하지만 서로 다른 DbContext 객체을 사용하는 것입니다.

요청을 통해 동일한 DbContext 개체를 사용하는 것이 중요합니다 (MVC 앱이라고 가정).

일반적인 방법은 컨트롤러에서 (또는 종속성 삽입을 사용하여) DbContext를 인스턴스화하고 모든 곳에서 참조를 사용하는 것입니다.

0

문제는 컨트롤러에 주입하고 내 설명에서 언급 한 바와 같이

관련 문제