2016-04-13 44 views
3

Özel bir DataSet yazdım (daha önce gördüğüm, güçlü bir şekilde yazılan DataSet'e dayanarak) ve tasarım zamanında kullanılmasını uygun hale getirmek istiyorum, ToolBox'tan sürüklenmek gibi şeyler (DataSet aracı olarak otomatik olarak oluşturulur). Bütün bunlar oluyor, çünkü ben kendi çalışma arkadaşlarım tarafından kurulan gelişim metodolojisini sürdürmeye çalışıyorum (Ben yeniyim, hahaha), Elbette Entity Framework'ün varlığından ve bu tür şeylerden haberdarım. Yani, benim form üzerine yerleştirdiğinizde bu hatayı alıyorum: adlandırılmış.Net DataSet tasarım zamanı için uygun değil

İlişkisi 'ParentChild_Relation' zaten

budur meselesi ilişki bu DataSet Tabii

aittir kod:

Public Class MyDataSet 
    Inherits DataSet 

    Public Const PARENTCHILD_RELATION As String = "ParentChild_Relation" 

    Public Sub New() 
     MyBase.New() 
     Me.BeginInit() 
     Me.CreateDataSet() 
     Me.EndInit() 
    End Sub 

    Private Sub CreateDataSet() 
     DataSetName = "Test" 
     Me.EnforceConstraints = True 
     Me.Tables.Add(New ParentTable) 'custom datatable 
     Me.Tables.Add(New ChildTable) 'custom datatable 

     CreateRelation() 
    End Sub 

    Private Sub CreateRelation() 
     With DirectCast(Me.Tables(ChildTable.TABLENAME).Constraints.Add(PARENTCHILD_RELATION , 
                   Me.Tables(ParentTable.TABLENAME).Columns(ParentTable.ID), 
                   Me.Tables(ChildTable.TABLENAME).Columns(ChildTable.ID)), ForeignKeyConstraint) 
      .UpdateRule = Rule.Cascade 
      .DeleteRule = Rule.Cascade 
      Me.Relations.Add(.ConstraintName, .RelatedColumns, .Columns, False) 
     End With 
    End Sub 

End Class 

Ben olası yardım farkında olacağım

DÜZENLEME Bu hat olmadan çalışır

: onlar olmadan

DÜZENLEME 2

çalışma yoludur çünkü

Me.Relations.Add(.ConstraintName, .RelatedColumns, .Columns, False) 

Ama yine de DataSet ilişki istiyorum önceki satır, bağlama yoluyla ilişki bulamaz:

BindingSource.DataSource = New MyDataSet 
BindingSource.DataMember = "ParentChild_Relation" 

cevap

1

Bunu yapmak zorundaydım: DataSet.Initialized olayını uygulayın ve ardından tüm ilişkileri kendi içinde oluşturun.

Public Class MyDataSet 
    Inherits DataSet 

    Public Const PARENTCHILD_RELATION As String = "ParentChild_Relation" 

    Public Sub New() 
     MyBase.New() 
     Me.CreateDataSet() 
     With DirectCast(Me.Tables(ChildTable.TABLENAME).Constraints.Add(PARENTCHILD_RELATION , 
                   Me.Tables(ParentTable.TABLENAME).Columns(ParentTable.ID), 
                   Me.Tables(ChildTable.TABLENAME).Columns(ChildTable.ID)), ForeignKeyConstraint) 
      .UpdateRule = Rule.Cascade 
      .DeleteRule = Rule.Cascade 
     End With 
     AddHandler Initialized, AddressOf InitializedHandler 
    End Sub   


    Private Sub InitializedHandler(sender As Object, e As EventArgs)    
     Relations.AddRange((From tb As DataTable In Tables 
         From fkc As ForeignKeyConstraint In tb.Constraints.OfType(Of ForeignKeyConstraint)() 
         Where Not Relations.Contains(fkc.ConstraintName) 
         Select New DataRelation(fkc.ConstraintName, fkc.RelatedColumns, fkc.Columns, False)).ToArray()) 
    End Sub 

    Private Sub CreateDataSet() 
     DataSetName = "Test" 
     Me.EnforceConstraints = True 
     Me.Tables.Add(New ParentTable) 'custom datatable 
     Me.Tables.Add(New ChildTable) 'custom datatable 
    End Sub 

End Class 

Ben

başkası için yararlı olacağını düşündüm