Воссоздайте код Linq в Sql, когда таблица изменится, где настроено - PullRequest
0 голосов
/ 03 июня 2009

У меня есть модель Linq to Sql, сгенерированная VS ORD, но я хочу внести в нее изменения, чтобы обойти пару проблем. Я могу изменить сгенерированный код designer.cs, но если мне когда-нибудь понадобится пересоздать таблицу в модели, я удаляю ее и перетаскиваю обратно в ORD. Это однако теряет все мои настройки. Есть ли другой способ?

Я видел ссылку на sqlMetal.exe , но не уверен, как бы я использовал это, чтобы обойти эту проблему.

Для информации мои настройки следующие:

  1. Я использую Guid и хочу, чтобы БД установила эти значения по умолчанию, поэтому я хочу изменить поведение linqtosl по умолчанию, чтобы добавить атрибут [Column(IsDbGenerated= true)] в свойства идентификатора.
  2. привязка модели по умолчанию для MVC не работает для коллекции (EntitySet<T>). Чтобы обойти это, мне нужно немного изменить сеттер для этих коллекций.

Ни одно из этих изменений не является особенно значительным, но моя база данных может значительно измениться с течением времени, и мне нужно помнить, чтобы выполнять каждую настройку каждый раз.

Ответы [ 3 ]

1 голос
/ 03 июня 2009

Это что такое "частичные" классы . L2SQL создает ваши классы сущностей как «частичные», поэтому вам никогда не придется редактировать сгенерированный дизайнером код, даже если вы воссоздаете свою модель сущности.

0 голосов
/ 09 июня 2009

Я уже прошел этот путь, и единственный надежный способ - отойти от пути sqlmetal.exe / dbml и подключиться к генератору пользовательских классов, например шаблонам LINQ to SQL для T4.

http://l2st4.codeplex.com/

Причина, по которой вам нужно использовать что-то вроде этого, заключается в том, что вам нужно, чтобы ваш генератор классов извлекал информацию о пользовательских изменениях из другого источника. Я закончил тем, что вставил custom в сгенерированный XML, который традиционно использует Dbml. Затем я изменил шаблоны t4, чтобы выкладывать нужные классы.

Предупреждение: в итоге это стало полным кошмаром для реализации и было отброшено в пользу файла блокнота пользовательских изменений. Нам просто нужно прожечь их по мере необходимости. IMO, это один из самых слабых мест Linq2SQL и большая причина, по которой я исследовал другие ORM для будущих проектов.

0 голосов
/ 09 июня 2009

У меня был тот же вопрос, и я надеялся увидеть здесь ответ, который решает оба из упомянутых вами вопросов. (Я нашел другой обходной путь к вашему пункту №2, хотя ваша идея использовать OnCreated () в частичном выглядит лучше, чем то, что я сейчас делаю.)

Недавно я наткнулся на статью (на которую я буду ссылаться ниже), которая может быть подходящим решением для достижения этих целей. В этой статье описывается, как автор (1) использует SQLMetal для создания файла dbml, (2) запускает пользовательский процесс, который анализирует и модифицирует этот файл dbml в соответствии с его потребностями, затем (3) снова использует SQLMetal, на этот раз в измененном файл dbml, для генерации кода. Это может быть много работы для небольших проектов / схем, но я мог видеть, как это может быть удобным обходным решением для больших проектов.

Вот ссылка: http://www.onedotnetway.com/enum-support-with-linq-to-sql-and-sqlmetal/

Удачи! -Mike

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