2
我新来到这里(我知道这个网站很长,但这是我第一次实际上要求一些)。EF6 - 添加对象到表动态
组件,我使用: - EF6,的DevExpress XtraGrid中
好......所以,我要的是那种做到这一点, 我有1种形式有多个表,我将有能够从每个NavigationBar中添加和删除。
我知道该怎么做,我只是需要一种方法来跳过选择的情况。
下面是一些代码,
Private Sub ListChanged(sender As Object, e As System.ComponentModel.ListChangedEventArgs)
If e.ListChangedType = System.ComponentModel.ListChangedType.ItemAdded Then
Dim bList As BindingList(Of Object) = TryCast(sender, BindingList(Of Object))
Dim m As Object = bList.LastOrDefault()
If m IsNot Nothing Then
Select Case _curentPageIndex
Case 0 : db.GESTARM.Add(m)
Case 1 : 'Other table add
Case 2 : 'Other table add
End Select
End If
End If
End Sub
我想,这样做是种这样的:
Private Sub ListChanged(sender As Object, e As System.ComponentModel.ListChangedEventArgs)
If e.ListChangedType = System.ComponentModel.ListChangedType.ItemAdded Then
Dim bList As BindingList(Of Object) = TryCast(sender, BindingList(Of Object))
Dim m As Object = bList.LastOrDefault()
'somehow get the table (type) of the entry through the m object
If m IsNot Nothing Then
db.<Table>.Add(m)
End If
End If
End Sub
因此,而不是写每增加对每一种情况下,我不得不做一些事情像那样。 是否可能或者我会坚持选择案例?
在此先感谢,并对不起,如果我的英语不好(我不是本地人)。
编辑1: 马克在评论中提到,我们可以在C# 但在VB中这是行不通的使用this ...
Public Class GenericRepository(Of T)
Implements IDisposable
Friend context As GestProGest1Entities
Friend dbSet As Entity.DbSet(Of T) ' Gives error on T "Type argument 'T' does not satisfy the 'Class' constraint for type parameter 'TEntity'"
Public Sub Dispose() Implements IDisposable.Dispose
If context IsNot Nothing Then
context.Dispose()
context = Nothing
End If
End Sub
Public Sub New(context As GestProGest1Entities)
Me.context = context
Me.dbSet = context.Set(Of T)() ' Gives error on T "Type argument 'T' does not satisfy the 'Class' constraint for type parameter 'TEntity'"
End Sub
Public Overridable Sub Insert(entity As T)
dbSet.Add(entity)
context.SaveChanges()
End Sub
End Class
任何想法如何做到这一点在VB?
编辑2: 好了,我得到了它的工作是这样
Public Class GenericRepository(Of T As Class)
我现在的问题是如何从对象获得类型
Private Sub ListChanged(sender As Object, e As System.ComponentModel.ListChangedEventArgs)
If e.ListChangedType = System.ComponentModel.ListChangedType.ItemAdded Then
Dim bList As BindingList(Of Object) = TryCast(sender, BindingList(Of Object))
Dim m As Object = bList.LastOrDefault()
Dim myType As Type = m.GetType()
Dim table As New GenericRepository(Of myType)(db) 'Doesn't accept myType here...
table.Insert(m)
End If
End Sub
欢迎来到SO!你的英语很好,你的问题很好解释,所以工作做得很好。这个问题已经出现了几次,http://stackoverflow.com/q/28364376/1158842,http://stackoverflow.com/q/5295554/1158842,http://stackoverflow.com/q/8138070/ 1158842,http://stackoverflow.com/q/17879206/1158842。这些解决你的问题吗? –
嗯,我想我必须坚持从我从这些帖子看到的选择案例,EF不喜欢dyncamic的东西... 感谢您的帮助,如果有人有任何想法如何使这更好方式,我都是耳朵。 –
您可以在DataSet级别添加实体,但是您必须自己做很多处理。 – DevilSuichiro