2009-01-23 8 views
5

Bon, j'ai rencontré un problème avec VB.NET. Donc, tous ces défenseurs de VB.NET s'il vous plaît pouvez-vous m'aider? Voici mon problème: J'utilise LINQ to Entities, ça fonctionne aussi avec LINQ to SQL, je construis mon fichier edmx puis je crée une classe Publc Partial du même nom que l'une des entités All fine jusqu'à maintenant, alors voici le problème.Classes partielles, LINQ, Interfaces et VB.NET

J'ai besoin de la classe Partial pour implémenter une interface Implements Interfaces.IAsset Mais VB.NET veut placer "Implements Interfaces.IAsset.ID" à la fin de la propriété, qui se trouve bien sûr dans la section de code généré de la Classe partielle, que je ne peux pas faire car le fichier edmx est généré automatiquement et changera dans le futur.

Voici la ligne de code qui a besoin de tri:

Propriété publique ID1() As Integer Met en œuvre Interfaces.IAsset.ID

En C#, il est très bien et fonctionne à merveille. Alors, pourquoi VB.NET ne peut-il pas implémenter une interface qui se trouve dans la classe générée par le code?

Répondre

5

Un peu de indirection dans la classe partielle devrait faire l'affaire ...

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 propriété qui implémente l'interface appelle la propriété réelle générée par le dbml. La classe aura essentiellement deux propriétés d'identification, ce qui n'est pas très élégant mais quand on y accède par l'interface, vous ne saurez pas la différence.

+2

Oui Je suis d'accord. C'est juste un codage fastidieux et inutile – Coppermill

0

Il n'y a aucun moyen de contourner cela. C'est une faille dans la façon dont VB vous force à gérer l'implémentation des interfaces.

Vous pouvez créer une bibliothèque séparée pour votre LINQ aux entités qui était en C#. Je ne suis pas sûr si vous pourriez simplement mettre des classes partielles dans le projet séparé et garder les bases dans un VB. Je n'ai jamais essayé ça.

Questions connexes