VB Частичный класс застрял!

Я застрял при попытке создать простейший частичный класс, чтобы получить доступ к свойству таблицы.

У меня есть автоматически созданный DataContext LINQ с:

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 будет доступно в моем собственном классе (а также в других столбцах Competitions), но когда я набираю «Me.», IntelliSense не предоставляет мне никаких свойств Competitions (т. Е. Столбцов данных).

Я пробовал всевозможные частичные общедоступные, добавляя пространство имен, такое же, как то, которое используется в автоматически сгенерированном ... Ничего не работает.

Может кто-нибудь предоставить рабочий образец, пожалуйста?


person Didier Levy    schedule 23.11.2010    source источник


Ответы (3)


Вам также необходимо сделать другое объявление myClassDataContext частичным:

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

В противном случае компилятор VB думает, что вы пытаетесь объявить другой «автономный» класс с тем же именем.

Это решит обе ваши проблемы - другие свойства и т. Д. В настоящее время не присутствуют в вашем «дополнительном» коде класса по той же причине.

person Jon Skeet    schedule 23.11.2010

Хорошо, спасибо, ребята ... Наконец-то все заработало, добавив такое же объявление пространства имен, например:

Namespace VuBridgeDB
Partial Public Class VubridgeDB

    Private Sub InsertCompetitions(ByVal instance As Competitions)

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

    End Sub

End Class

Конец пространства имен

Как только это будет сделано, Intellisense полностью распознает параметр экземпляра.

person Didier Levy    schedule 23.11.2010

Объявление класса, которое работает с нами, просто Partial Class myClassDataContext в отдельном файле, не более того. Он должен находиться в той же сборке (dll или exe) и пространстве имен исходного класса.

person Joachim VR    schedule 23.11.2010