На самом деле вы просто щелкаете правой кнопкой мыши по отношению и выбираете 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 отношений, удалите данные из набора и воссоздайте их. Будьте готовы к потенциально значимой зачистке / рефакторингу кода