Отношения и ограничения

Gazon
Дата: 23.11.2004 10:17:26
Есть 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 конфликтует с ограничением в базе?
кузя
Дата: 23.11.2004 11:20:23
если последний параметр в конструкторе DataRelation
createConstraints = false, то ни каких constaint'ов создано не будет (см. MSDN).

если параметр = true, то будет создан UniqueConstraint для parent таблицы и ForeignKeyConstraint для child таблицы.
кузя
Дата: 23.11.2004 11:40:18
+
автор
если удалить в прилождении родительскую строку, а потом попытаться обновить данные в базу, то происходит исключение, говорящее, что DELETE конфликтует с ограничением в базе?
если в child таблице SQL сервера нет FOREIGN KEY ON DELETE CASCADE, то сначала нужно обновлять child таблицу, а только потом parent таблицу. иначе имеем, что имеем - SqlException.
Gazon
Дата: 25.11.2004 19:48:19
Спасибо за помощь.