Автоматически генерировать классы друзей из модели в C # - PullRequest
3 голосов
/ 28 апреля 2010

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

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

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

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

    public object FirstName { get; set; }
}

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 28 апреля 2010

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

1 голос
/ 28 апреля 2010

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

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

У меня не было большого успеха с ORM. SQL, который они генерируют, имеет тенденцию быть менее чем оптимальным, и вам приходится прыгать через обручи, чтобы обойти ограничения в рамках. Кроме того, размещение кода запроса в вашем приложении, а не в базе данных, к которой оно, опять же, на мой взгляд, принадлежит, нарушает четкую многоуровневую архитектуру и возлагает на разработчика больше ответственности за обслуживание БД, что исключает часть преимуществ выделенного DBA. Кроме того, это делает невозможной отладку запросов в середине полета.

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

1 голос
/ 28 апреля 2010

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

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

0 голосов
/ 28 апреля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...