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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top