Частичные классы, LINQ, интерфейсы и VB.NET

Хорошо, я столкнулся с проблемой с VB.NET. Итак, все эти защитники VB.NET, пожалуйста, не могли бы вы мне помочь? Вот моя проблема: я использую LINQ to Entities, он также работает с LINQ to SQL, я создаю свой файл edmx. Затем я создаю Partial Public Class с тем же именем, что и у одного из объектов. До сих пор все в порядке, так что вот проблема.

Мне нужен класс Partial для реализации интерфейса Implements Interfaces.IAsset. Но VB.NET хочет поместить «Implements Interfaces.IAsset.ID» в конец свойства, которое, конечно, находится в разделе сгенерированного кода класса Partial, который Я не могу сделать, так как файл edmx автоматически генерируется и будет меняться в будущем.

Вот строка кода, которую нужно отсортировать:

Публичное свойство ID1() как Integer реализует Interfaces.IAsset.ID

В C# это прекрасно и творит чудеса. Так почему же VB.NET не может реализовать интерфейс, который находится в классе, сгенерированном кодом?


person Coppermill    schedule 23.01.2009    source источник


Ответы (2)


Немного косвенности в частичном классе должно помочь...

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

Свойство, реализующее интерфейс, вызывает фактическое свойство, сгенерированное dbml. По сути, класс будет иметь два свойства id, что не очень элегантно, но при доступе через интерфейс вы не заметите разницы.

person TGnat    schedule 23.01.2009
comment
Да, я согласен. Это просто трудоемкое и ненужное кодирование - person Coppermill; 17.04.2009

Обойти это невозможно. Это ошибка в том, как VB заставляет вас обрабатывать реализацию интерфейсов.

Вы можете создать отдельную библиотеку для LINQ to Entities, которая была на C#. Я не уверен, что вы могли бы просто поместить частичные классы в отдельный проект и сохранить основы в проекте VB. Я никогда этого не пробовал.

person Garry Shutler    schedule 23.01.2009