我有一些像这样的代码:
Function GetTypeFromTableName(ByVal _TableName As String, ByVal _DataContext As DataContext)
Dim Mytype As Type = (From t In _DataContext.Mapping.GetTables Where t.TableName = "dbo." + _TableName Select t.RowType.Type).SingleOrDefault
Return Mytype
End Function
Dim DBA As New LINQDataContext
_TBLName="City"
TableType = GetTypeFromTableName(_TBLName, DBA)
CallByName(obj, "Code", CallType.Set,1)
Dim Equery = From T In DBA.GetTable(TableType) Select T
Equery = Equery.Where(Function(Oj1) Oj1 Is obj)
Dim oopp = From t In Equery Select CallByName(t, "CName", CallType.Get, Nothing)
oopp.ToList.Item(0) = Txt_Name.Text
DBA.SubmitChanges()
SubmitChanges不起作用。怎么了?
答案 0 :(得分:2)
在我看来,您正在选择匿名类型列表,然后更改不在表中匹配对象中的匿名类型列表中的值。由于您尚未更新表对象本身,因此SubmitChanges无需执行任何操作。
尝试将其更改为以下
Dim matchingObj = Equery.Where( Function(Oj1) Oj1 Is obj )
.SingleOrDefault();
然后设置属性值。
CallByName( matchingObj, "CName", CallType.Set, Txt_Name.Text );
然后提交您的更改。
注意:我读VB好,但是我写不好。您可能需要修复我的语法。您可能还希望在尝试设置其属性之前确保存在匹配的对象。
答案 1 :(得分:1)
这已经过时了,但我想我会明白这一点。
每当您的更新或Submitchanges失败时,请尝试puttin InsertOnSubmit()声明。此声明将为您提供详细错误。
就我而言,我的代码非常简单。
var single = dataContext.MySysTables.FirstOrDefault();
single.DispatchIdIndex ++;
single.ModifyDate = DateTime.Now;
dataContext.SubmitChanges();
这没有更新。当我输入一个InsertOnSubmit(单)行时,它给出的错误是“由于表没有主键,因此无法插入数据”。这是我的测试表,我没有主键。一旦我添加了一个新列并制作了一个主键而不是一切正常。
和平