2010-04-28 2 views
3

Я использую Linq для Sql (хотя это применимо и в Entity Framework) для моих моделей, и я все время нахожу, что я создаю классы друзей для своих моделей. Я нахожу это много времени и многократно. Есть ли простой способ автоматически генерировать эти классы друзей на основе моделей? Возможно, визуальный студийный макрос?Автоматически создавать классы друзей из модели в C#

Пример класса приятеля, что я хотел бы создать:

[MetadataType(typeof(PersonMetadata))] 
public partial class Person 
{ 
} 

public class PersonMetadata 
{ 
    public object Id { get; set; } 

    public object FirstName { get; set; } 
} 

Спасибо заранее.

ответ

1

Я бы посмотрел на Text Templates (tt) in Visual Studio 2010 (я считаю, что вы можете использовать их в 2008 году, но их поддержки не так много, как в 2010 году).

Это позволит вам написать общий шаблон, используя код, который вы можете использовать для общей обработки типов LINQ to SQL и создания классов дружественных контактов.

0

Возможно, вы захотите взглянуть на шаблоны T4. Вот quick intro от Oleg Sych. Они работают так же, как шаблоны генерации кода CodeSmith или MyGeneration.

Чтобы начать скачок, вы также можете потратить некоторое время на анализ альтернативных шаблонов генерации кода для Entity Framework, например Self-Tracking Entities. Это шаблоны T4, которые просматривают файлы метаданных из модели .EDMX для генерации альтернативных объектов. Они могут помочь вам взглянуть на вашу модель L2S и создать для вас классы друзей.

Надеюсь, это поможет. Удачи!

3

Не создавайте классы приятелей. Классы друзей - это немного клочья. Вместо этого напишите associated metadata provider. Это дает правильные подсказки для динамических данных во время выполнения. Сначала это немного больше, но в долгосрочной перспективе это окупится.

+0

Это отличное предложение. Но если вы не используете аннотации данных, где вы сохраняете свои метаданные? –

+1

В основном, я этого не делаю. Я склоняюсь к соглашению над конфигурацией, особенно для всего, что * может быть * сгенерировано в шаблоне T4 (зачем генерировать атрибуты, когда вы можете просто предоставить метаданные напрямую?). Если вы * должны * настроить тип вручную, напишите провайдер для этого и сохраните там, где это необходимо. Но это последнее средство. Предпочитайте модель представления, специфичную для представления, для аннотирования типов объектов напрямую. –

1

Я слышал много хорошего о шаблонах T4.

Следующее - мое мнение и не предназначено для начала пламенной войны.

У меня не было большого успеха с ОРМ. Создаваемый ими SQL имеет тенденцию быть менее чем оптимальным, и вы заканчиваете прыгать через обручи, чтобы обойти ограничения в рамках. Кроме того, размещение кода запроса в вашем приложении, а не в базе данных, где оно, опять же, на мой взгляд, принадлежит, нарушает четкую архитектуру n-уровня, а также повышает ответственность за обслуживание db для разработчика, исключая часть преимуществ DBA. Кроме того, он делает отладочную работу в середине полета практически невозможной.

Я закончил писать утилиту для генерации прокси-классов db и связанных с ними хранимых процедур из определения таблицы и превратил это в плагин Visual Studio. Это около 1200 строк кода, не включая String Template library. Я использую эту установку около 6 месяцев и не жалею.

Смежные вопросы