2009-01-23 16 views
5

De acuerdo, me encontré con un problema con VB.NET. Entonces todos esos defensores de VB.NET pueden ayudarme? Aquí está mi problema: estoy usando LINQ to Entities, también trabaja con LINQ to SQL, construyo mi archivo edmx y luego creo una clase de Publc parcial del mismo nombre que una de las entidades All fine hasta ahora, así que aquí viene el problema.Partial Classes, LINQ, Interfaces y VB.NET

Necesito la clase parcial para implementar una interfaz Implements Interfaces.IAsset Pero VB.NET desea colocar "Implements Interfaces.IAsset.ID" al final de la propiedad, que por supuesto está en la sección de códigos generados de la Clase parcial, que no puedo hacer ya que el archivo edmx se genera automáticamente y cambiará en el futuro.

Aquí es la línea de código que hay que clasificar:

Pública ID1 propiedad() As Integer Implementa Interfaces.IAsset.ID

En C# que está bien y funciona de maravilla. Entonces, ¿por qué no puede VB.NET implementar una interfaz que está en la clase generada por código?

Respuesta

5

Un poco de indirección en la clase parcial debe hacer el truco ...

Public Property AssetId() As Int32 Implements IAsset.AssetId 
    Get 
     Return Id1 
    End Get 
    Set(ByVal value As Int32) 
     Id1 = value 
    End Set 
End Property 

La propiedad que implementa la interfaz llama a la propiedad real generada por la dbml. La clase tendrá esencialmente dos propiedades de identificación, lo que no es muy elegante, pero cuando se acceda a través de la interfaz no sabrá la diferencia.

+2

Sí, estoy de acuerdo. Solo requiere tiempo y una codificación innecesaria – Coppermill

0

No hay forma de evitar esto. Es un error en la forma en que VB te obliga a manejar la implementación de las interfaces.

Puede crear una biblioteca separada para su LINQ en Entidades que estaba en C#. No estoy seguro de si podrías poner clases parciales en el proyecto separado y mantener los conceptos básicos en uno VB. Nunca lo he intentado.