Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Две таблицы с автоинкрементными ключами / 13 сообщений из 13, страница 1 из 1
26.03.2007, 09:22
    #34414594
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
пишу программу на c#. есть две таблицы. индексы в них автоинкрементные. первая ко второй состоит в отношении один ко многим. строки добавляются/удаляются, т.е. при осуществлении update айдишники меняются.

добавляю на форме запись в первую таблицу:
id 0

добавляю во вторую:
id 0
t1 0 (ссылка на запись в первой)

делаю апдейт первой, в ней становится, например,
id 5

во второй поле t1 по прежнему хранит 0. делая апдейт второй таблицы естественно получаю The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Table2_Table1".

не знаю, что за фигня.. я в ступоре! почему то раньше такой проблемы не возникало.. мне казалось при апдейте чего-нибудь все ссылки исправляются.. тем более update rule выбрано CASCADE (датасет типизированный).. чепуха какая то!

зы: я сначала по ошибке в раздел MSSQL Server запостил.. там мне посоветовали эти поля по одной штучке добавлять! но я то знаю что раньше всё работало как-то так) плииз хелп!

ззы: сейчас вообще тупняк.. добавляю в грид вью две строчке, одна получается например с айдишником 1, другая - с 3, делаю апдейт - а мне орут мол запись с id = 3 ужо есть! че такое вобще??
...
Рейтинг: 0 / 0
26.03.2007, 20:36
    #34416782
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
что бы не было конфилктов суррогатных с реальными ID назначейте autoincrementstep и ...seed равным -1

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2007, 09:00
    #34417254
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
спасибо, сейчас попробую!
...
Рейтинг: 0 / 0
27.03.2007, 09:16
    #34417284
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
гм... ну в общем то это не решает главной проблемы..
обнавленные айдишники не совпадают с айдишниками во второй таблице.. которая апдейтится вслед за первой.
...
Рейтинг: 0 / 0
27.03.2007, 09:54
    #34417382
dmitry_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
killmepleaseгм... ну в общем то это не решает главной проблемы..
обнавленные айдишники не совпадают с айдишниками во второй таблице.. которая апдейтится вслед за первой.
так relation надо сделать и настроить
...
Рейтинг: 0 / 0
27.03.2007, 10:39
    #34417524
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
я поставил в properties каскадное обновление и удаление.. может еще забыл что нибудь?
при апдейте первой таблицы, во второй св-во table1Row обращается в null (
...
Рейтинг: 0 / 0
27.03.2007, 14:49
    #34418531
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
по ходу что то глючит у меня... каскадное удаление тоже не работает.. хотя вроде должно ))
...
Рейтинг: 0 / 0
27.03.2007, 23:24
    #34419914
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
А как уже апдейтите непосредственно базу данных.

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.03.2007, 09:31
    #34420285
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
базу данных - методом Update тэйбл адаптера.

зы: по идее, если в dataGridView, подключенный к датасету, ввести поле с неправильным внешним ключем - он должен ругаться, верно? у меня что-то этого не происходит.. Установил вижл студию по новой, с другого диска - все равно..
...
Рейтинг: 0 / 0
28.03.2007, 10:31
    #34420521
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
вот так ГЛЮК!

делаю "простой советский" датасет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
            
            DataSet ds1 = new DataSet();

            DataTable t1 = new DataTable();
            DataTable t2 = new DataTable();

            DataColumn id1 = new DataColumn("id", typeof(int));
            id1.AutoIncrement = true;
            id1.AutoIncrementSeed = - 1 ;
            id1.AutoIncrementStep = - 1 ;
            id1.Unique = true;

            DataColumn id2 = new DataColumn("id", typeof(int));
            id2.AutoIncrement = true;
            id2.AutoIncrementSeed = - 1 ;
            id2.AutoIncrementStep = - 1 ;
            id2.Unique = true;

            t1.Columns.Add(id1);
            t1.PrimaryKey = new DataColumn[] { id1 };

            t2.Columns.Add(id2);
            t2.PrimaryKey = new DataColumn[] { id2 };
            t2.Columns.Add("lnk", typeof(int));

            ds1.Tables.Add(t1);
            ds1.Tables.Add(t2);
            ds1.Relations.Add(new DataRelation("rel", id1, t2.Columns["lnk"]));
            ds1.Relations[ 0 ].ChildKeyConstraint.UpdateRule = Rule.Cascade;
            ds1.Relations[ 0 ].ChildKeyConstraint.DeleteRule = Rule.Cascade;

            DataRow r;

            r = t1.NewRow();
            t1.Rows.Add(r);
            int FK = (int)r[id1];

            r = t2.NewRow();
            r["lnk"] = FK;
            t2.Rows.Add(r);

            t1.Rows.RemoveAt( 0 );
все прекрасно работает - каскадное удаление, обновление, на форин кей ругается если ввести не то!

а вот типизированный датасет, сгенерированный студией:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
            ds.Table1Row r1 = ds.Table1.NewTable1Row();
            ds.Table1.AddTable1Row(r1);
            int FK = r1.id;

            ds.Table2Row r2 = ds.Table2.NewTable2Row();
            r2.lnk =  80 ;
            ds.Table2.AddTable2Row(r2);
такая байда прокатила без проблем!
хотя в настройках везде-везде все ограничения установлены...

подскажите, из-за чего это может быть??
...
Рейтинг: 0 / 0
28.03.2007, 11:08
    #34420714
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
похоже, что студия генерирует левый код :(
диск лицензионный из майкрософта, много тыщ стоит.. пробовал на других компах ставить - тот же эффект. принес из дома C# эскпресс - то же... блин, придется без типизированных датасетов обходиться ((
...
Рейтинг: 0 / 0
29.03.2007, 20:58
    #34425973
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
а вы в дизайнере типизированного датасет у Relation проставляете каскадные обновления?

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
30.03.2007, 12:13
    #34427047
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Две таблицы с автоинкрементными ключами
Совсем забыл про них..
спасибо!

вот я дурак ))))

зы: все же у меня ощущение что раньше они автоматом проставлялись, или типа того)
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Две таблицы с автоинкрементными ключами / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]