2009-12-14 3 views
1

LinQ를 사용하여 테이블을 업데이트하려고합니다. 레코드가 삽입 되기는하지만 어떤 이유로 업데이트되지 않습니다.LinQ를 사용하는 동안 테이블이 업데이트되지 않음

가능한 문제를 될 수있는 판단

Dim db as new empDataContext 
Dim emptable as new employee 

if update then 
emptable=GetEmp(txtempID.Text) 
emptable.Name="Test" 
emptable.Age=11 
emptable.City="NYC" 
else 
emptable.Name="Test" 
emptable.Age=11 
emptable.City="NYC" 
emtable.deptID=10 
db.employee.InsertOnSubmit(emptable) 
end if 
db.SubmitChanges() 

답변

2

그냥 내가 여기에서 볼 수있는, 당신의 GetEmp 방법은 당신이 사용하고있는 것보다 데이터를 retreive하기 위해 다른 데이터 컨텍스트를 사용 같은데요에서 DB에 다시 저장하십시오.

LINQ to SQL을 사용할 때 컨텍스트는 테이블의 변경 내용을 추적합니다. 우연히 컨텍스트를 조심하고 혼합하지 않으면 이와 같은 이상한 행동을 취할 수 있습니다.

당신이 들어간 상태로 테스트 할 수 있습니다

emptable=GetEmp(txtempID.Text) 

당신이 컨텍스트는 문제가 있음을 발견하면
// Returns the first matching employee with the id 
emptable = (from e in db.Employees 
      where e.id == txtempid.Text).FirstOrDefault() 

에, 단지 매개 변수로 상황을 받아 들일 것이 아니라 생성하기 위해 GetEmp 방법을 수정 새로운 하나.

0

GetEmp의 기능은 무엇입니까? 특히 제시된 바와 같이 db이라는 empDataContext에 대한 참조가없는 것으로 보입니다. DataContextidentity maps의 예이며 지속성 메커니즘에서로드 된 항목을 추적합니다. 다른 DataContextGetEmp에 사용하는 경우 DataContextdbtxtempID.Text으로 표시된 값과 동일한 SomeIDemployee의 인스턴스를 알지 못합니다.

그래서 하나 GetEmpdb에 대한 참조를 전달하거나 다음에 코드를 변경 :

emptable = db.Single(Function(e as employee) e.SomeID=Int32.Parse(txtempID.Text)) 

는 다음 업데이트가 작동합니다.

0

내가 추측해야만한다면 GetEmp() 호출이 동일한 데이터베이스 컨텍스트 개체를 사용하지 않는다고 말할 수 있습니다. 따라서 Linq-To-SQL은 "db"데이터베이스 컨텍스트에서 변경 사항이 발생하지 않는다고 생각합니다.

랜디

관련 문제