powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не могу понять где ошибка
8 сообщений из 8, страница 1 из 1
Не могу понять где ошибка
    #37740365
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть код:
Код: c#
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.
43.
44.
45.
46.
List<string> INN = Program.DC.Organizations.Select(i => i.INN).ToList();
                List<string> INNBatch = new List<string>();
                List<string> LoadFiles = Program.DC.LoadFiles.Where(i => i.DataType == 1).Select(i => i.FileName).ToList(); 
                foreach (FTPItem Item in FTPItems.Where(i => !LoadFiles.Contains(i.FullName)))
                {
                    Console.WriteLine("Обработка файла-архива:\n" + Path.GetFileName(Item.FullName));
                    try
                    {
                        INNBatch.Clear();
                        foreach (Organizations org in XMLDocToolsKit.ParceToOrganizations(IOToolsKit.SaveToUnZip(Item.SaveToBytes())).Where(i => !i.FullName.ToLower().Contains("тест")))
                        {
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            Console.WriteLine("Организация:\n" + org.ShortName + '\n');
                            Console.ResetColor();
                            if (!INN.Contains(org.INN) && !INNBatch.Contains(org.INN))
                            {
                                    Program.DC.Organizations.InsertOnSubmit(org);
                                    INNBatch.Add(org.INN);
                                    Console.WriteLine("добавлена в задание для ее загрузки в БД.");
                                    Program.DC.SubmitChanges();
                            }
                            else
                            {
                                Console.WriteLine("уже содержится в БД.");
                            }
                        }
                        Program.DC.LoadFiles.InsertOnSubmit(new LoadFiles { DataType = 1, FileName = Item.FullName });
                        Program.DC.SubmitChanges();
                        INN.AddRange(INNBatch);

                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Распакованные организации добавлены в БД");
                        Console.ResetColor();
                    }
                    catch (Exception e)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("произошла ошибка:\n" + e.ToString() + '\n');
                        Console.ResetColor();
                    }
                    finally
                    {
                        GC.Collect();
                        GC.WaitForPendingFinalizers();
                    }
                }


В таблице Organizations первичным ключем является поле INN. Чтобы не было ошибок при добавлении уже существующей организации, есть два списка INN и INNBatch. Вначале из БД читаются ИНН всех организаций в список INN. Потом по мере добавления в задание на инсерт ИНН добавляется в список INNBatch. После фиксации всех изменений БД, все ИНН, содержащиеся в INNBatch, добавляются в INN. Проверка наличия уже существующей комапнии происходит условием:
Код: c#
1.
if (!INN.Contains(org.INN) && !INNBatch.Contains(org.INN))


Но почему-то при фиксации изменений (строка Program.DC.SubmitChanges();) происходит ошибка БД дублирования первичного ключа.
...
Рейтинг: 0 / 0
Не могу понять где ошибка
    #37740672
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем внутри циклов несколько раз SubmitChanges() ?

вне главного цикла 1 раз поставьте и всё
...
Рейтинг: 0 / 0
Не могу понять где ошибка
    #37741796
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneа зачем внутри циклов несколько раз SubmitChanges() ?

вне главного цикла 1 раз поставьте и всёТогда придется инсертить сразу около 100 тыс. строк. Но это не суть вопроса. У меня не работает проверка.
...
Рейтинг: 0 / 0
Не могу понять где ошибка
    #37741834
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в файле dbml, на поле первичного ключа, стоит свойство
Auto Generated value = true?
если конечно в базе ключ автоинкриментный
...
Рейтинг: 0 / 0
Не могу понять где ошибка
    #37741836
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не могу понять где ошибка
    #37741956
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dezaв файле dbml, на поле первичного ключа, стоит свойство
Auto Generated value = true?
если конечно в базе ключ автоинкриментный
Первичный ключ-ИНН не инкрементный.
...
Рейтинг: 0 / 0
Не могу понять где ошибка
    #37741978
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rsolanov,

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


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