У меня есть база данных с множеством определенных отношений внешних ключей. Когда я просто перетаскиваю любую таблицу, участвующую в этих соединениях FK, в редактор DBML, чтобы автоматически сгенерировать файл DBML, все они будут представлены в виде ассоциаций.
Отсюда я могу вносить любые изменения в эти ассоциации: я мог бы пожелать, чтобы родительский конец ассоциации был внутренним
, а не публичным
, чтобы сериализатор JSON (скажем) не попадал в циклические ссылки; или в связи между таблицами Form
и FormAnswer
, я мог бы хотеть, чтобы дочернее свойство называлось Ответы
, а не сгенерированное машиной FormAnswers
.
Теперь, если дизайн базы данных изменился, и я хочу обновить DBML, чтобы отразить это изменение, кажется, что эти настройки потребуют, чтобы я отслеживал каждое отдельное изменение и обновлял его вручную (добавьте свойство, установите его источник , тип данных источника, тип данных C # ...)
Это может быть довольно утомительный процесс; я спрашиваю, есть ли способ автоматизировать это.
Похоже, что идеальным решением было бы, если бы был какой-либо способ сделать эти спецификации непосредственно в диаграммах базы данных SQL Server, с тем чтобы полностью перегенерировать DBML файл (удалив все и перетащив его в редактор DBML заново) даст тот же результат.
Подозревая, что я уже знал бы о вышеизложенном, если бы это было достижимо, я был бы рад согласиться с:
Поскольку все объекты Linq to SQL генерируются как частичные классы, я некоторое время думал, что смогу создать новый файл, который я поддерживаю вручную, чтобы который я мог бы скопировать все изменения как упомянутые.
Так что, когда я ' Я изменил ассоциацию, я копался в коде designer.cs, вырезал модифицированную ассоциацию и вставлял ее в свой собственный файл. После повторной генерации я ожидал бы ошибки компилятора для любых дубликатов, и легко проходил бы и удалял эти ассоциации из DBML. Проблема здесь в том, что ассоциации кажутся только свойствами с атрибутами. Если Форма
имеет свойство с именем Ответы
, и генератор DBML попытается создать свойство с именем FormAnswers
, результирующий объект Форма
будет просто имейте оба свойства, что совсем не то, что я хочу.
Кто-нибудь повезло с любым из этих решений? Или, если вы знаете какой-либо другой способ решения проблемы, я открыт для предложений.
В конструкторе Linq-To-Sql полностью отсутствуют какие-либо команды обновления. Поэтому я думаю, что конструктор непригоден для использования в реальном инкрементном проекте. Есть три способа решить эту проблему:
У меня есть надстройка для VS (2008, 2010, 2012 и 2013), которая может вам помочь. Он добавляет синхронизацию DB <=> DBML и имеет ряд настроек, дающих вам контроль над тем, какие типы изменений следует синхронизировать, а также «списки исключений», позволяющие помечать отдельные таблицы/представления/члены/FK как «не сенсорные "элементы".
Что касается упомянутой вами проблемы ассоциации FK =>: параметры синхронизации позволяют исключить все или отдельные дочерние свойства навигации, чтобы избежать циклических ссылок, которые могут вызвать проблемы при сериализации объектов сущностей.
Вы можете загрузить надстройку с http://www.huagati.com/dbmltools/, если хотите протестировать ее.