2009-12-14 42 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方法是使用不同的數據上下文中檢索比您正在使用的一個數據將其保存回數據庫。

使用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是做什麼用的?特別是,如所呈現的那樣,它似乎沒有對名爲dbempDataContext的引用。 DataContextidentity maps的示例,因此它們跟蹤從持久性機制加載的項目。如果您在GetEmp中使用不同的DataContext,則DataContextdb不知道employee的實例,而SomeID等於txtempID.Text代表的值。

因此,無論傳遞到db參考到GetEmp或更改您的代碼如下:

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

那麼你的更新應該工作。

0

如果我不得不猜測,我會說GetEmp()調用不使用相同的數據庫上下文對象。因此,Linq-To-SQL不認爲在「db」數據庫上下文中發生了任何更改。

蘭迪