Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 18.03.2021
Сообщений: 14

При добавлении записи в БД SQLite возникает исключение

21.01.2023, 19:04. Показов 1003. Ответов 1

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Недавно начал изучать Entity Framework Core.
Использую два пакета NuGet:
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools

В базе данных SQLite есть две сущности.
Первая называется "City" и в ней только один атрибут: CityId типа TEXT.
Этот атрибут хранит в себе названия городов и одновременно является первичным ключом.

Во второй сущности есть три атрибута: Id (INTEGER), Name (TEXT), ManagerUnitials (TEXT) и
внешний ключ CityId(TEXT).

При нажатии на кнопку "добавить" возникает исключение:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Competitions_Cities_CityId".
The conflict occurred in database "DB1", table "dbo.Cities", column 'CityId'.

И 6 подобных предупреждений:
CS8618 свойство "CityId", не допускающий значения NULL, должен содержать значение, отличное от NULL, при выходе из конструктора. Возможно, стоит объявить свойство как допускающий значения NULL.

Как мне исправить эти ошибки?
И ещё вопрос, как допустить значение Null в атрибуте?

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Title="MainWindow" Height="500" MinHeight="500" Width="800" MinWidth="700">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="3*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
 
        <DataGrid x:Name="DG2" Grid.Row="0" Grid.Column="1" AutoGenerateColumns="False" CanUserAddRows="false">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Название" Binding="{Binding Name}" Width="8*"/>
                <DataGridTextColumn Header="Организатор" Binding="{Binding ManagerUnitials}" Width="5*"/>
                <DataGridTextColumn Header="Город" Binding="{Binding City.CityId}" Width="5*"/>
            </DataGrid.Columns>
        </DataGrid>
 
        <Button Content="Добавить" Grid.Row="1" Grid.Column="1" Height="35" Width="100" 
                Click="AddCompetition_Click"/>
    </Grid>


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public partial class MainWindow : Window
    {
        public ApplicationContext db = new ApplicationContext();
        public MainWindow()
        {
            InitializeComponent();
            DBInteraction dbInteraction = new DBInteraction();
            string city = "Москва";
            dbInteraction.CreateCity(city);
        }
 
        private void AddCompetition_Click(object sender, RoutedEventArgs e)
        {
            DBInteraction dbInteraction = new DBInteraction();
            string competition = "Соревнование 1";
            string manager = "Иванов И.И.";
            string city = "Москва";
            
            dbInteraction.CreateCompetition(competition, manager, city);
            DG2.ItemsSource = db.Competitions.ToList();
        }
    }
Контекст:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ApplicationContext : DbContext
{
    public virtual DbSet<City> Cities { get; set; }
    public virtual DbSet<Competition> Competitions { get; set; }
 
    public ApplicationContext()
    {
        Database.EnsureCreated();
    }
 
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=DB1;Trusted_Connection=True;");
    }
}
Сущности:
C#
1
2
3
4
5
public class City
{
    public string CityId { get; set; }
    public ICollection<Competition> Compititions { get; set; }
}
C#
1
2
3
4
5
6
7
8
public class Competition
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string ManagerUnitials { get; set; }
    public string CityId { get; set; }
    public virtual City City { get; set; }
}
Добавление записей в БД:
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
public class DBInteraction
{
    public bool CreateCompetition(string competition, string manager, string city)
    {
        bool result = false;
        using (ApplicationContext db = new ApplicationContext())
        {
            bool checkIsExist = db.Competitions.Any(x => x.Name == competition);
            if (!checkIsExist)
            {
                Competition newCompetition = new Competition()
                {
                    Name = competition,
                    ManagerUnitials = manager,
                    CityId = city
                };
 
            db.Competitions.Add(newCompetition);
                // Exception
                db.SaveChanges();
                result = true;
            }
            return result;
        }
    }
 
    public bool CreateCity(string city)
    {
        bool result = false;
        using (ApplicationContext db = new ApplicationContext())
        {
            bool checkIsExist = db.Cities.Any(x => x.CityId == city);
            if (!checkIsExist)
            {
                City newCity = new City { CityId = city };
                db.Cities.Add(newCity);
                db.SaveChanges();
                result = true;
            }
            return result;
        }
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2023, 19:04
Ответы с готовыми решениями:

Исключение при добавлении в БД SQLite
Привет, я пытаюсь добавить в БД новые данные //Метод добавления пользователей public bool AddUser(string table, string...

Исключение при добавлении записи в таблицу БД
При нажитии на кнопку insert , выдаёт исключение Вот исключение

При обращении к структуре из класса возникает исключение:нарушение прав доступа при записи. Почему?
Структура Test описана в классе ABC: class ABC{ struct Test { int get_i() { return i; } void put_i(int j) { i = j;} ...

1
28 / 20 / 10
Регистрация: 01.12.2018
Сообщений: 186
22.01.2023, 11:17
Лучший ответ Сообщение было отмечено Daniel_47 как решение

Решение

Цитата Сообщение от Daniel_47 Посмотреть сообщение
И ещё вопрос, как допустить значение Null в атрибуте?
Это делается на этапе проектирования БД.
Второе, что вызвало вопрос. Я сам не пользовался EF никогда, только напрямую работал с БД (тоже SQLite) через запросы. Разве название SqlServer в пакете Microsoft.EntityFrameworkCore.SqlServer не говорит о том, что эта библиотека для работы именно с SQL Server, а не с SQLite? Ведь могут быть различия в принципе работы, даже если сейчас вы с ними не столкнулись (более опытные специалисты наверняка тут подскажут, ибо не силен в EF).
Цитата Сообщение от Daniel_47 Посмотреть сообщение
Первая называется "City" и в ней только один атрибут: CityId типа TEXT.
Лучше бы вам нормализовать вашу БД, ибо текстовый атрибут делать первичным ключом не айс.
Цитата Сообщение от Daniel_47 Посмотреть сообщение
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Competitions_Cities_CityId".
The conflict occurred in database "DB1", table "dbo.Cities", column 'CityId'.
Проблема у вас в данном случае с FOREIGN KEY. Согласно документации с официального сайта SQLite:
Кликните здесь для просмотра всего текста

In order to use foreign key constraints in SQLite, the library must be compiled with neither SQLITE_OMIT_FOREIGN_KEY nor SQLITE_OMIT_TRIGGER defined. If SQLITE_OMIT_TRIGGER is defined but SQLITE_OMIT_FOREIGN_KEY is not, then SQLite behaves as it did prior to version 3.6.19 (2009-10-14) - foreign key definitions are parsed and may be queried using PRAGMA foreign_key_list, but foreign key constraints are not enforced. The PRAGMA foreign_keys command is a no-op in this configuration. If OMIT_FOREIGN_KEY is defined, then foreign key definitions cannot even be parsed (attempting to specify a foreign key definition is a syntax error).

Assuming the library is compiled with foreign key constraints enabled, it must still be enabled by the application at runtime, using the PRAGMA foreign_keys command. For example:
SQL
1
sqlite> PRAGMA foreign_keys = ON;

вам необходимо включить поддержку внешних ключей в вашей БД.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2023, 11:17
Помогаю со студенческими работами здесь

При добавлении выполнении макроса возникает ошибка "Исключение из HRESULT: 0x800A03EC"
Здравствуйте. Вылетает ошибка при выполнении кода. Помогите, пожалуйста разобраться. Спасибо. Тест ошибки Сообщение об ошибке: ...

Вывести все записи таблицы при обработке которых возникает исключение
У меня есть большая таблица на миллионы записей. Для простоты предположим, что в ней всего два поля: @id типа bigint и hs_params типа text....

При добавлении записи в DBGrid (исп.таблица paradox) возникает ошибка(код и скрины внутри)
Здравствуйте. Есть программа, в которой подключена таблица типа paradox.В ней есть 4 существующих поля и 2 вычисляемых. При добавлении...

Возникает исключение при записи в txt файл (Процесс не может получить доступ к файлу)
Прив! При исполнении следующего кода using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

При добавлении записи возникает ошибка "grid inde out of range"
Есть БД в PhpMyAdmin она подключается к делфи через АДО, тематка базы данных &quot;интернет-магазин&quot; так вот при добавлении заказа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru