Vb.net 使用LinQ时未更新表

Vb.net 使用LinQ时未更新表,vb.net,linq,Vb.net,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

我正在尝试使用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()

从我在这里看到的情况来看,我猜您的
GetEmp
方法使用的是不同的数据上下文来检索数据,而不是将数据保存回数据库

当使用LINQtoSQL时,上下文跟踪表的更改。如果你不小心,不小心混淆了上下文,你可能会有这样奇怪的行为

您可以通过以下方式进行测试:

emptable=GetEmp(txtempID.Text)


如果您发现上下文是问题所在,只需修改
GetEmp
方法以接受上下文作为参数,而不是创建一个新的参数本身。

GetEmp做什么?特别是,如前所述,它似乎没有对名为
db
empDataContext
的引用
DataContext
s是从持久性机制加载的项的示例,因此它们跟踪从持久性机制加载的项。如果在
GetEmp
中使用不同的
DataContext
,则
DataContext
db
不知道
employee
SomeID
等于
txtempID.Text
表示的值的实例

因此,要么将对
db
的引用传递到
GetEmp
中,要么将代码更改为以下内容:

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

那么您的更新应该可以工作。

如果我不得不猜测的话,我会说GetEmp()调用没有使用相同的数据库上下文对象。因此,LINQtoSQL认为“db”数据库上下文中没有发生任何更改

兰迪

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