Acessando membros da outra metade de uma classe parcial
-
04-07-2019 - |
Pergunta
Estou apenas aprendendo a trabalhar com classes parciais no VB.NET e VS2008. Especificamente, estou tentando estender uma classe LINQ para SQL que foi criada automaticamente pelo SQLMETAL.
A classe gerada automaticamente se parece com a seguinte:
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
Em um arquivo separado, eis o que estou tentando fazer:
Partial Public Class DataContext
Partial Public Class Concession
Public Function Foo() as String
Return DoSomeProcessing(Me.Country)
End Function
End Class
End Class
... mas eu fico azul jaggies debaixo 'Me.Country
'E a mensagem 'Country' is not a member of 'DataContext.Concession'
. Ambas as metades da classe parcial estão no mesmo espaço de nome.
Então, como faço para acessar as propriedades da metade gerada automaticamente da classe parcial, da minha metade da classe parcial?
Solução
A menos que o VB.NET gera coisas diferentes em seus arquivos LINQ para SQL a partir de C# As classes das tabelas DB não estão dentro da classe DataContext, ao lado dela.
Então você tem a aula MyNamespace.datacontext.Concession Quando a outra metade da classe parcial é realmente MyNamespace.Concession
Outras dicas
(Este relacionado ao vb.net - pode ser diferenças com os projetos C#)
Coloquei minhas entidades em seu próprio espaço para nome, configurando a propriedade Modelo LINQ para SQL.
por exemplo, myco.myproj.business.entities
Eu também adiciono entidades comerciais que não são do LinQ lá, então elas estão todas no mesmo espaço para nome.
No entanto, ao tentar fazer as adições de classe parcial acima, descobri que a classe parcial (ou seja, a que você gera, não a classe LINQ gerada automaticamente) deve estar no mesmo projeto que o modelo LINQ para SQL. Caso contrário, na visualização de classe e no visualizador de objetos, você vê duas classes separadas - aparentemente no mesmo espaço de nome, mas não na verdade. Não tenho certeza se isso é um bug ou estou fazendo algo errado.
Mas, de qualquer forma, colocar o arquivo de classe parcial no mesmo projeto que seu modelo funciona.