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

Я только учусь работать с частичными классами в 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', Обе половины частичного класса находятся в одном пространстве имен.

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

2 ответа

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам