Visual Studio 2013 Dataset Designer refre sh отношений - PullRequest
0 голосов
/ 08 января 2020

У меня есть приложение с набором данных, связанным с базой данных sql сервера. Я обновил некоторые имена или внешние ключи и первичные ключи на сервере sql. Как мне сделать эти изменения переводить в набор данных. Например, у меня был первичный ключ с именем fk_temsempl_xxxxx. Я изменил его на fk_temsempl в базе данных sql. Как сделать так, чтобы это изменение отображалось в конструкторе наборов данных в Visual Studio?

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

1 Ответ

1 голос
/ 09 января 2020

На самом деле вы просто щелкаете правой кнопкой мыши по отношению и выбираете Edit Relation... или дважды щелкаете по строке (когда курсор мыши меняется с стрелки на символ перетаскивания), но я, честно говоря, не стал бы беспокоиться; Затем вам потребуется дальнейший рефакторинг, чтобы сделать его в коде везде, где используется отношение, и он может активно использоваться визуальными дизайнерами.

Вы также сталкиваетесь с проблемой, что VS может не помочь вам с рефакторингом: в сценарии привязки данных ios большинство вещей, которые могут быть источником данных, также могут представлять собой совокупность нескольких вещей, которые могут быть действительными DataSource. Затем они полагаются на строку DataMember, чтобы определить, какой из наборов данных в источнике данных следует использовать для данных.

Например, когда источник связывания должен перечислить DataTable, Свойство bindingsource.DataSource может быть объектом DataSet, который содержит DataTable, and the bindingsource.DataMember is a string of "YOUR_TABLE_NAME". the BindingSource might not be bound as myBindignSource.DataSource = myDataSet.MyDataTable`. Рефакторинг внутри строк включает в себя поиск и замену

DataRelations в DataSet создаются из внешних ключей, которые были обнаружены при добавлении соответствующих таблиц в набор данных, но важно отметить, что, как и DataTables, и все остальное, они НИЧЕГО не имеют отношения к объектам схемы базы данных - они не связаны с ними постоянно, сущности набора данных просто настраиваются в виде объектов базы данных, когда они (сущности набора данных) создаются впервые. Таблицы данных создаются только из выбранных столбцов, и все. Типы данных NET очень похожи на типы, выводимые запросом. Для таблицы:

Person
------
Name VARCHAR(50)
SSN INTEGER
Birthdate DATE

Если вы создали таблицу с SELECT * FROM Person, вы получите набор данных с Name (string), SSN (int), Birthdate (datetime), но если вы сделали новый набор данных в наборе данных на основе SELECT LEFT(Name, 1) as Initial, PADLEFT(SSN, 20) as PadSSN, DATEDIFF(day, Birthdate, NOW()) as AgeDays FROM Person, то вы получит набор данных Initial (string), PadSSN (string), AgeDays (int) - т.е. набор данных не будет похож на таблицу db. Эта концепция разъединения между набором данных и базой данных широко распространена, и на самом деле единственными вещами, которые каким-либо образом связаны с базой данных, являются свойства, которые определяют, к какой таблице / столбцу БД относится конкретный DataTable / DataColumn для целей загрузки / сохранения данных. Ваш столбец данных Person.Name можно переименовать в Blahblah, но он все равно будет иметь свойство .SourceColumn, установленное на "Name" - так работает отображение между набором данных и базой данных; набор данных в основном полностью независим от базы данных. Переименование столбца БД потребовало бы изменения только в свойстве SourceColumn

В DataRelations даже отсутствует понятие ссылки на родительское отношение в базе данных; нет SourceRelation или SourceFK proeprty, потому что в этом нет необходимости. Они настроены с теми же правилами и сгенерированным именем, основанными на правилах FK, но затем они функционируют независимо и только в наборе данных. Если вы переименуете или даже удалите FK из базы данных, набор данных продолжит работать так же, как всегда; добавление datarow к дочерней таблице, когда нет строки aprent, потому что это вызовет исключение - это не имеет ничего общего с FK в БД, и DataRelation может иметь другие правила для FK (например, он может каскадно удалять когда FK - это NOACTION) или даже разные столбцы. Вы можете иметь больше или меньше DataRelations, чем у базы данных FK


Запустить Custom Tool - это не «связаться с БД и посмотреть, какие изменения произошли там, и скопировать их в набор данных», это « превратить XSD, описывающий набор данных, в набор C# классов, которые реализуют строго типизированный набор данных / таблица / отношение / колонка и т. д. c объекты ". Каждый раз, когда вы изменяете XSD, редактируя его в визуальном конструкторе и нажимая «Сохранить», пользовательский инструмент запускается. Если вы редактируете XSD непосредственно в текстовом редакторе, вам может потребоваться запустить его вручную, чтобы ваши изменения были отражены в c# классах


Переконфигурирование табличного адаптера, вероятно, также ничего не изменит с отношениями; Он связан исключительно с изменением таблицы данных и адаптера таблиц. Если вы действительно хотите обновить sh отношений, удалите данные из набора и воссоздайте их. Будьте готовы к потенциально значимой зачистке / рефакторингу кода

...