Есть DataSet, в него загружено 2 таблицы, создаем отношение один ко многим:
this.relationStoresDiscounts = new DataRelation("StoresDiscounts", new DataColumn[] {
this.tablestores.stor_idColumn}, new DataColumn[] {
this.tablediscounts.stor_idColumn}, false);
this.Relations.Add(this.relationStoresDiscounts); |
Правильно ли я понимаю, что здесь будет создано еще и ограничение ForeignKye на дочерней таблице?
И правильно ли я понимаю, что здесь будет создано ограничение PrimeryKye на родительской таблице?
Потому что из Sql Server'a я знаю, что отношения между двумя таблицами - это создание ограничений первичного ключа и вторичного(внешнего) ключа. Здесь это тоже самое?
И еще вопрос:
заглянул в код, который генерирует мастер для доступа к бузе:
ForeignKeyConstraint fkc;
fkc = new ForeignKeyConstraint("StoresDiscounts", new DataColumn[] {
this.tablestores.stor_idColumn}, new DataColumn[] {
this.tablediscounts.stor_idColumn});
this.tablediscounts.Constraints.Add(fkc);
fkc.AcceptRejectRule = System.Data.AcceptRejectRule.None;
fkc.DeleteRule = System.Data.Rule.Cascade;
fkc.UpdateRule = System.Data.Rule.Cascade;
this.relationStoresDiscounts = new DataRelation("StoresDiscounts", new DataColumn[] {
this.tablestores.stor_idColumn}, new DataColumn[] {
this.tablediscounts.stor_idColumn}, false);
this.Relations.Add(this.relationStoresDiscounts); |
Я не могу понять, почему он сначала создает ограничение типа ForeingKye, а потом создает отношение, и почему он вообще создает ограничение ForeingKey, если при создании отношения это ограничение добавляется автоматически? И почему он в конструкторе new DataRelation(... последним параметром передает значение false, если ограничение перед этим создалось?
И почему, если удалить в прилождении родительскую строку, а потом попытаться обновить данные в базу, то происходит исключение, говорящее, что DELETE конфликтует с ограничением в базе?