Технология Microsoft ADO.NET

Свойство PrimaryKey


Мы научились конструировать структуру таблицы в объекте DataSet, а также определять отношения между таблицами. Во всех случаях для выделения первичного ключа в таблице использовалось свойство Unique. Например, в самом последнем примере - проекте Programm2DataGrid2Table - первичный ключ "Код туриста" определялся так:

... DataColumn dcTouristID = new DataColumn("Код туриста", typeof(int)); dcTouristID.Unique = true; ...

DataColumn dcInfoTouristsID = new DataColumn("Код туриста", typeof(int)); dcInfoTouristsID.Unique = true; ...

Для вывода таблиц идентификации записей этого определения вполне хватало. Однако свойство Unique всего лишь указывает на уникальность заданного поля, т.е. на отсутствие повторяющихся записей. В самом деле, в таблице может быть несколько полей, которые должны быть уникальными и одно из них (или их комбинация) будут образовывать первичный ключ. Для указания именно первичного ключа используется свойство PrimaryKey объекта DataTable:

DataTable dtTourists = new DataTable("Туристы"); DataColumn dcTouristID = new DataColumn("Код туриста", typeof(int)); dtTourists.PrimaryKey = new DataColumn [] {dtTourists.Columns["Код туриста"]};

В сокращенной записи определение будет такое:

dtTourists.Columns.Add("Код туриста", typeof(int)); dtTourists.PrimaryKey = new DataColumn [] {dtTourists.Columns["Код туриста"]};

Можно применять комбинацию полей для задания первичного ключа:

DataTable dtTourists = new DataTable("Туристы"); DataColumn dcTouristID = new DataColumn("Код туриста", typeof(int)); DataColumn dcLastName = new DataColumn("Фамилия",typeof(string)); dtTourists.PrimaryKey = new DataColumn [] {dtTourists.Columns["Код туриста"], dtTourists.Columns["Фамилия"]};

Здесь первичным ключом будут значения поля "Код туриста" в сочетании со значением поля "Фамилия".

При конструировании объекта DataTable в редакторе Tables Collection Editor после создания объектов Columns в свойстве PrimaryKey можно выделять одно или несколько полей - они отмечаются числами и становятся первичным ключом (рис. 9.15):


Рис. 9.15.  Определение первичного ключа в редакторе Tables Collection Editor

После определения первичного ключа объекта DataTable для свойства AllowDBNull (разрешение значений null) объектов DataColumn, формирующих ключ, будет установлено значение false.

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



Содержание раздела