Доступ к членам другой половины частичного класса
Я только учусь работать с частичными классами в 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 вы видите два отдельных класса - по-видимому, в одном и том же пространстве имен, но не совсем. Не уверен, что это ошибка или я делаю что-то не так.
Но, в любом случае, помещение файла частичного класса в тот же проект, что и ваша модель, работает.