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



           

Программное создание объектов - часть 3


Другими словами, drQuestionsVariants - название экземпляра DataRelation, которое мы будем использовать в коде, а свойство relationName - всего лишь название отражаемой связи, которую можно удалить или переименовать.

Итак, мы создали все объекты для отображения таблиц, полей и даже связей между таблицами.

Теперь нам осталось определить некоторые свойства таблиц, называемые ограничениями. Свойство ограничения (Constraint) объекта DataTable бывает двух типов - UniqueConstraint и ForeignKeyConstraint. Свойство UniqueConstraint определяет первичный ключ таблицы, например, в таблице Questions ключевым полем является questID. Объект dсQuestID представляет это поле:

DataColumn dсQuestID = dtQuestions.Columns.Add("questID", typeof(Int32));

Ограничение UniqueConstraint, налагаемое на объект dсQuestID, запрещает появление дублированных строк:

UniqueConstraint UC_dtQuestions = new UniqueConstraint(dсQuestID); dtQuestions.Constraints.Add(UC_dtQuestions);

Однако при создании объекта dсQuestID мы ведь уже определяли его уникальность:

dсQuestID.Unique = true;

Действительно, последняя строка представляет собой неявный способ задания ограничения UniqueConstraint. Если мы уже определили уникальное поле или поля, используя свойство Unique, задавать ограничение UniqueConstraint не нужно.

Второе ограничение - ForeignKeyConstraint - определяет, как должны себя вести дочерние записи при изменении родительских записей и наоборот. Конечно, интерфейс нашего приложения вообще не подразумевает внесение изменений, но ADO .NET требует точного описания объектов для управления ими. Ограничение ForeignKeyConstraint содержит следующие три правила:

  • UpdateRule - применяется при изменении родительской строки;
  • DeleteRule - применяется при удалении родительской строки;
  • AcceptRejectRule - применяется при вызове метода AcceptChanges объекта DataTable, для которого определено ограничение.

Для этих правил могут применяться следующие значения:

  • Cascade - каскадное обновление связанных записей;
  • None - изменения в родительской таблице не отражаются в дочерних записях;
  • SetDefault - полю внешнего ключа в дочерних записях присваивается значение, заданное в свойстве DefaultValue этого поля;
  • SetNull - полю внешнего ключа в дочерних записях присваивается значение Null.




Содержание  Назад  Вперед