どのようにしてlinq2sqlを使ってコンパイル時に型を知らなくてもレコードを取得できますか?graq linq to primarykey by typeを知らなくても
は、これまでのところ、私は
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)を使用したくない
そのわずかダミーではありませんデータコンテキスト部分クラスの削除時にビジネスロジックが進行していますこれは何とかできますか?
ありがとうございます! striplinwariorに応答して
EDIT
、私はに私のコードを編集した:これは削除コードcorrecltyをオフに解雇し、だけでなく、最初にレコードを追加しようとしているようだ
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
db、私はいくつかの "not null"フィールドが空であることを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
あなたは
hi。私はプライマリーキーフィールドの名前を取得する方法を知っています。そのiveは考え出した。しかし、一度そのフィールドの名前があると、どのようにレコードを取得するのですか?それが問題です。ありがとう。 –
@Yisman:私の編集を参照してください。 – StriplingWarrior
ありがとう!鉱山を参照してください:-) –