Asp.net LINQ语句不更新数据库?
我有以下代码:Asp.net LINQ语句不更新数据库?,asp.net,sql,vb.net,linq-to-sql,Asp.net,Sql,Vb.net,Linq To Sql,我有以下代码: Dim dbHousing As New dcHousingDataContext Dim pullresidents = From p In dbHousing.webResidents _ Select p.dorm_building, p.dorm_room, p.occupantnum _ Order By dorm_building, dorm_room Dim j as i
Dim dbHousing As New dcHousingDataContext
Dim pullresidents = From p In dbHousing.webResidents _
Select p.dorm_building, p.dorm_room, p.occupantnum _
Order By dorm_building, dorm_room
Dim j as integer = 1
Dim previous As String = ""
For Each row In pullresidents
If previous = "" Then
Dim wResident As New webResident
wResident.occupantnum = j
dbHousing.SubmitChanges()
j = j + 1
previous = row.dorm_building & " " & row.dorm_room
Else
If previous = row.dorm_building & " " & row.dorm_room Then
Dim wResident As New webResident
wResident.occupantnum = j
dbHousing.SubmitChanges()
j = j + 1
Else
Dim wResident As New webResident
j = 1
wResident.occupantnum = j
dbHousing.SubmitChanges()
j = j + 1
previous = row.dorm_building & " " & row.dorm_room
End If
End If
Next
当我运行它时,查看调试器,一切看起来都正常,但当我检查数据库表时,它应该插入到其中-列值(对于OccupentNum)没有更改-它们仍然为null
不确定这是否相关,但请注意,我现在已将j显式更新为整数。调试时,我注意到wResident.OccupentNum显示为类型“Integer?”-但这似乎没有任何区别-当我重新运行时,它仍然显示为类型“Integer?”如果这是错误的,请原谅我-但是如果要保存新创建的“webResident”对象,您不需要将它们与上下文关联吗?我看不出dbHousing.SubmitChanges()如何保存它不知道的webResident。如果这是错误的,请原谅我-但是如果要保存新创建的“webResident”对象,您不需要将它们与上下文相关联吗?我看不出dbHousing.SubmitChanges()如何能够保存它不知道的WebResident。对于pullresidents中的每一行,使用
迭代所有获取的对象,但从不修改行。因此,没有可以发送回数据库的更改。您对pullresidents中的每一行使用迭代所有获取的对象,但从不修改行。因此,没有可以发送回数据库的更改。Dave,在提交更改之前,您需要先将新的webResident对象插入表中
dbHousing.webResidents.InsertOnSubmit(webResident) Dave,在提交更改之前,需要先将新的webResident对象插入表中
dbHousing.webResidents.InsertOnSubmit(webResident) 我觉得你在这里做得太多了
您只想更改行,对吗
尝试这样做:
Dim wResident As New webResident
wResident.occupantnum = j
dbHousing.SubmitChanges()
j = j + 1
为此:
row.occupantnum = j
dbHousing.SubmitChanges()
j = j + 1
我觉得你在这里做得太多了
您只想更改行,对吗
尝试这样做:
Dim wResident As New webResident
wResident.occupantnum = j
dbHousing.SubmitChanges()
j = j + 1
为此:
row.occupantnum = j
dbHousing.SubmitChanges()
j = j + 1
什么是后端服务器?SQL Server?Oracle?SQL Server 2008在后端。什么是后端服务器?SQL Server?Oracle?SQL Server 2008位于后端。如何让它将我尝试更改的职业编号与该行的记录相关联?如果我执行row.OccupentNum=j,则表示该行是只读的?这是因为您使用选择p.dorm\u building、p.dorm\u room、p.OccupentNum
执行到匿名类型的投影。删除此投影以获取完整的实体(只需使用选择p
),它将是可更新的。使用IQueryable.ToArray()然后使用索引访问数组。。。然后你可以修改值Dan是对的,不要选择p.dorm\u building,p.dorm\u room,p.OccupentNum,只需选择pDaniel-说真的,你是我的英雄!我如何告诉它将我试图更改的职业编号与该行的记录相关联?如果我执行row.OccupentNum=j,则表示该行是只读的?这是因为您使用选择p.dorm\u building、p.dorm\u room、p.OccupentNum
执行到匿名类型的投影。删除此投影以获取完整的实体(只需使用选择p
),它将是可更新的。使用IQueryable.ToArray()然后使用索引访问数组。。。然后你可以修改值Dan是对的,不要选择p.dorm\u building,p.dorm\u room,p.OccupentNum,只需选择pDaniel-说真的,你是我的英雄!请看我在上面对Daniel答案的评论…我不理解如何将其与当前上下文关联。请看我在上面对Daniel答案的评论…我不理解如何将其与当前上下文关联。谢谢Rafe。实际上,我正在尝试更新我已提取的现有行对象-而不是添加新对象…我遗漏了什么?我认为您在这里做的太多了。您只想更改行,对吗?尝试将此:Dim wResident作为新的webResident wResident.OccupentNum=j dbHousing.SubmitChanges()j=j+1放入以下行:row.OccupentNum=j dbHousing.SubmitChanges()中j=j+1如果要更新对象,则必须修改对象本身,而不是创建新对象-我认为您需要设置row.occuntnum=。谢谢Rafe。实际上,我正在尝试更新我已提取的现有行对象-而不是添加新对象…我遗漏了什么?我认为您在这里做的太多了。您只想更改行,对吗?尝试将此:Dim wResident作为新的webResident wResident.OccupentNum=j dbHousing.SubmitChanges()j=j+1放入以下行:row.OccupentNum=j dbHousing.SubmitChanges()中j=j+1如果要更新对象,则必须修改对象本身,而不是创建新对象-我认为您需要设置row.occuntnum=。