【问题标题】:.Net DataSet not suitable for design time.Net 数据集不适合设计时
【发布时间】:2016-08-05 00:12:21
【问题描述】:

我写了一个自定义数据集(基于强类型数据集,我看的更远了),我想让它适合在设计时使用,比如从工具箱中拖动(作为数据集工具自动生成) .所有这一切都在发生,因为我试图保持由我的同事设定的开发方法(我是新人,哈哈哈),当然我知道实体框架和那种东西的存在。所以,当我把它放在我的表单上时,我收到了这个错误:

名为“ParentChild_Relation”的关系已属于此数据集

当然是物质关系

这是代码:

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

我会知道任何可能的帮助

编辑

没有这条线也可以:

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

但是,我仍然想要 DataSet 关系,因为这是它们的工作方式

编辑 2

如果没有上一行,它不会通过绑定找到关系:

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

【问题讨论】:

    标签: vb.net foreign-keys dataset design-time


    【解决方案1】:

    我必须这样做:实现 DataSet.Initialized 事件,然后在其中创建所有关系。

    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
    

    我认为这对其他人会有所帮助

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 2014-11-30
      • 2022-09-30
      相关资源
      最近更新 更多