Настройка DBML против регенерации

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

Отсюда я могу вносить любые изменения в эти ассоциации: я мог бы пожелать, чтобы родительский конец ассоциации был внутренним , а не публичным , чтобы сериализатор JSON (скажем) не попадал в циклические ссылки; или в связи между таблицами Form и FormAnswer , я мог бы хотеть, чтобы дочернее свойство называлось Ответы , а не сгенерированное машиной FormAnswers .

Теперь, если дизайн базы данных изменился, и я хочу обновить DBML, чтобы отразить это изменение, кажется, что эти настройки потребуют, чтобы я отслеживал каждое отдельное изменение и обновлял его вручную (добавьте свойство, установите его источник , тип данных источника, тип данных C # ...)

Это может быть довольно утомительный процесс; я спрашиваю, есть ли способ автоматизировать это.

1. Могу ли я отразить эти изменения на сервере SQL?

Похоже, что идеальным решением было бы, если бы был какой-либо способ сделать эти спецификации непосредственно в диаграммах базы данных SQL Server, с тем чтобы полностью перегенерировать DBML файл (удалив все и перетащив его в редактор DBML заново) даст тот же результат.

Подозревая, что я уже знал бы о вышеизложенном, если бы это было достижимо, я был бы рад согласиться с:

2. Могу ли я извлечь эти изменения в свой собственный класс?

Поскольку все объекты Linq to SQL генерируются как частичные классы, я некоторое время думал, что смогу создать новый файл, который я поддерживаю вручную, чтобы который я мог бы скопировать все изменения как упомянутые.

Так что, когда я ' Я изменил ассоциацию, я копался в коде designer.cs, вырезал модифицированную ассоциацию и вставлял ее в свой собственный файл. После повторной генерации я ожидал бы ошибки компилятора для любых дубликатов, и легко проходил бы и удалял эти ассоциации из DBML. Проблема здесь в том, что ассоциации кажутся только свойствами с атрибутами. Если Форма имеет свойство с именем Ответы , и генератор DBML попытается создать свойство с именем FormAnswers , результирующий объект Форма будет просто имейте оба свойства, что совсем не то, что я хочу.

Кто-нибудь повезло с любым из этих решений? Или, если вы знаете какой-либо другой способ решения проблемы, я открыт для предложений.

8
задан Gert Arnold 21 August 2013 в 19:32
поделиться

2 ответа

В конструкторе Linq-To-Sql полностью отсутствуют какие-либо команды обновления. Поэтому я думаю, что конструктор непригоден для использования в реальном инкрементном проекте. Есть три способа решить эту проблему:

  • Не использовать дизайнер и кодировать сопоставления
  • Не использовать дизайнер и писать сопоставления в XML. SqlMetal полезен для начальной генерации.
  • Создайте пользовательский инструмент, который добавит ваши модификации. Каждый раз регенерируем полную модель и запускаем этот инструмент.
1
ответ дан 5 December 2019 в 20:11
поделиться

У меня есть надстройка для VS (2008, 2010, 2012 и 2013), которая может вам помочь. Он добавляет синхронизацию DB <=> DBML и имеет ряд настроек, дающих вам контроль над тем, какие типы изменений следует синхронизировать, а также «списки исключений», позволяющие помечать отдельные таблицы/представления/члены/FK как «не сенсорные "элементы".

Что касается упомянутой вами проблемы ассоциации FK =>: параметры синхронизации позволяют исключить все или отдельные дочерние свойства навигации, чтобы избежать циклических ссылок, которые могут вызвать проблемы при сериализации объектов сущностей.

Вы можете загрузить надстройку с http://www.huagati.com/dbmltools/, если хотите протестировать ее.

sync options dialog

excluding one side of a FK association

6
ответ дан 5 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: