我怎樣才能抓住一個記錄(並最終刪除它)使用linq2sql而不知道編譯時的類型?抓住linq到sql記錄由primarykey而不知道它的類型
到目前爲止,我已經得到了
Sub Delete(ByVal RecordType As String, ByVal ID As Integer)
Dim dummy = Activator.CreateInstance(MyAssembly, RecordType).Unwrap
Dim tbl = GetTable(dummy.GetType)
tbl.DeleteOnSubmit(dummy)
End Sub
但當然啞不是實際的記錄,它只是一個虛擬
我不想使用直接的SQL(或executecommand)作爲在datacontext部分類中刪除業務邏輯
這可以以某種方式完成嗎?
非常感謝你!
編輯
響應striplinwarior,我修改了代碼:
Sub Delete(ByVal RecordType As ObjectType, ByVal ID As Integer)
Dim dummy = Activator.CreateInstance(ObjectType.Account.GetType.Assembly.FullName, RecordType.ToString).Unwrap
SetObjProperty(dummy, PrimaryKeyField(RecordType), ID)
Dim tbl = GetTable(dummy.GetType)
tbl.Attach(dummy)
tbl.DeleteOnSubmit(dummy)
SubmitChanges()
End Sub
這並不關火刪除代碼correclty,又似乎首先嚐試添加記錄到數據庫,因爲我得到一個sqlexception,有些「不空」字段是空的,我猜對於虛擬記錄是真實的,因爲這是唯一的主鍵,否則是全空的。所以我嘗試了其他代碼ü張貼(反正我一直想要的東西),這很好!
她我當前的代碼:
Function LoadRecord(ByVal RecordType As String, ByVal RecordID As Integer) As Object
Dim dummy = Activator.CreateInstance(AssemblyName, RecordType).Unwrap
Dim rowType = dummy.GetType
Dim eParam = Expression.Parameter(rowType, "e")
Dim idm = rowType.GetProperty(PrimaryKeyField(RecordType))
Dim lambda = Expression.Lambda(Expression.Equal(Expression.MakeMemberAccess(eParam, idm), Expression.Constant(RecordID)), eParam)
Dim firstMethod = GetType(Queryable).GetMethods().[Single](Function(m) m.Name = "Single" AndAlso m.GetParameters().Count() = 2).MakeGenericMethod(rowType)
Dim tbl = GetTable(rowType)
Dim obj = firstMethod.Invoke(Nothing, New Object() {tbl, lambda})
Return obj
End Function
Sub Delete(ByVal RecordType As String, ByVal RecordID As Integer)
Dim obj = LoadRecord(RecordType, RecordID)
Dim tbl = GetTable(obj.GetType)
tbl.DeleteOnSubmit(obj)
SubmitChanges()
End Sub
謝謝
嗨。我知道如何獲得主鍵字段的名稱。這個新的想法。但是一旦我有了這個領域的名字,我如何獲得這個記錄。這就是問題所在。謝謝。 – 2011-02-01 14:26:55