Доступ к членам другой половины частичного класса

Я только учусь работать с частичными классами в VB.NET и VS2008. В частности, я пытаюсь расширить класс LINQ to SQL, автоматически созданный SqlMetal.

Автоматически сгенерированный класс выглядит так:

Partial Public Class DataContext
    Inherits System.Data.Linq.DataContext

 ...


<Table(Name:="dbo.Concessions")>  _
Partial Public Class Concession

 ...

     <Column(Storage:="_Country", DbType:="Char(2)")>  _
   Public Property Country() As String
          ...
    End Property

 ...

End Class

В отдельном файле вот что я пытаюсь сделать:

Partial Public Class DataContext

    Partial Public Class Concession

        Public Function Foo() as String
            Return DoSomeProcessing(Me.Country)
        End Function

    End Class

End Class

... но я получаю синие неровности под "Me.Country" и сообщение 'Country' is not a member of 'DataContext.Concession'. Обе половины разделяемого класса находятся в одном и том же пространстве имен.

Итак, как мне получить доступ к свойствам автоматически сгенерированной половины частичного класса из моей половины частичного класса?


person Herb Caudill    schedule 25.10.2008    source источник


Ответы (2)


Если VB.NET не генерирует разные вещи в своих файлах LINQ to SQL из C#, классы таблиц БД не входят в класс DataContext, а находятся рядом с ним.

Итак, у вас есть класс MyNamespace.DataContext.Concession, тогда как другая половина частичного класса на самом деле MyNamespace.Concession.

person Aaron Powell    schedule 25.10.2008

(Это связано с VB.NET - могут быть различия с проектами С#)

Я помещаю свои объекты в их собственное пространство имен, настроив свойство модели Linq-to-SQL.

например MyCo.MyProj.Business.Entities

Затем я также добавляю туда бизнес-объекты, не относящиеся к Linq, чтобы все они находились в одном пространстве имен.

Однако при попытке сделать описанные выше частичные добавления классов я обнаружил, что частичный класс (то есть тот, который вы создаете, а не автоматически сгенерированный класс LINQ) ДОЛЖЕН находиться в том же проекте, что и модель Linq-to-SQL. В противном случае в представлении классов и средстве просмотра объектов вы видите два отдельных класса - вроде бы в одном и том же пространстве имен, но на самом деле это не так. Не уверен, что это баг или я что-то не так делаю.

Но, в любом случае, размещение файла частичного класса в том же проекте, что и ваша модель, работает.

person Joe Niland    schedule 14.03.2011