VB部分类......卡住了!

时间:2010-11-23 11:17:04

标签: vb.net partial-classes

在尝试创建最简单的部分类以访问表属性时,我陷入困境。

我有一个LINQ自动生成的DataContext:

Namespace VuBridgeDB
    <System.Data.Linq.Mapping.DatabaseAttribute(Name:="C:\Users\Didier\Documents\Visual Studio 2010\Projects\VuBridge1\VuBridge1\Data\VuBridgeDB.sdf")> _
    Partial Public Class myClassDataContext
        Inherits System.Data.Linq.DataContext

        Private Shared mappingSource As System.Data.Linq.Mapping.MappingSource _ 
                = New System.Data.Linq.Mapping.AttributeMappingSource()

        Partial Private Sub InsertCompetitions(ByVal instance As Competitions)
        End Sub
    End Class

<Table(Name:="Competitions")> _
    Partial Public Class Competitions    

        Partial Private Sub OnC_TitleChanged()
        End Sub
    End Class

现在我尝试在我的一个类中添加自己的业务逻辑:

Public Class myClassDataContext    
    Private Sub InsertCompetitions(ByVal instance As Competitions)
    End Sub
End Class    

Public Class Competitions
    Private Sub onC_SiteChanged()
            Me.
    End Sub
End Class

问题:

  1. VB.NET拒绝类名myClassDataContext说它已经存在。

  2. 我期待C_Site属性在我自己的类(以及其他比赛专栏)中可用,但是当我输入“Me。”时,IntelliSense不会给我任何竞赛属性(即数据栏)。

  3. 我尝试过各种各样的Partial Public,添加名称空间与自动生成的名称空间相同......没什么用。

    有人可以提供工作样品吗?

3 个答案:

答案 0 :(得分:4)

你需要另外声明myClassDataContext部分声明:

 Public Partial Class myClassDataContext
     Private Sub InsertCompetitions(ByVal instance As Competitions)
         ...
     End Sub
     ...
 End Class

否则VB编译器会认为您正在尝试声明另一个具有相同名称的“独立”类。

这将解决您的两个问题 - 由于完全相同的原因,您的“额外”类代码中不存在其他属性等。

答案 1 :(得分:1)

好的,谢谢你们......我终于通过添加相同的命名空间声明来完成这些工作,,如下所示:

Namespace VuBridgeDB
Partial Public Class VubridgeDB

    Private Sub InsertCompetitions(ByVal instance As Competitions)

        MsgBox("Inserting " & instance.C_Title, vbInformation)

    End Sub

End Class

结束命名空间

完成此操作后,Intellisense将完全识别实例参数。

答案 2 :(得分:0)

与我们合作的类声明只是Partial Class myClassDataContext在一个单独的文件中,仅此而已。这应该在原始类的同一个程序集(dll或exe)和名称空间中。