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

При создании записи данные появляются в БД в папке bin, надо чтобы данные добавлялись в БД, созданной миграцией

03.02.2023, 21:23. Показов 501. Ответов 0

Студворк — интернет-сервис помощи студентам
Добрый день. Использую Entity Framework Core в связке с WPF и SQLite. После введения команды "Add-Migration Initial" в консоли диспетчера пакета, создалась база данных. Когда создаю запись все данные почему-то записываются в БД в папке bin, при том что в DataGrid отображаются данные из БД созданной миграцией.
Как сделать так, чтобы все создаваемые записи добавлялись в БД в корневой папке проекта?
И ещё хотелось бы сделать так, чтобы приложение можно было без проблем запустить в любой директории и на любом другом компьютере с ОС Windows.
Если будут предложения, как сделать код более правильным, готов выслушать, ибо я только недавно начал изучать EF Core и привязку данных

XML
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
<Window x:Class="SQLite_Probe.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:SQLite_Probe"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
 
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
        </Grid.RowDefinitions>
 
        <DataGrid x:Name="productsDataGrid" AutoGenerateColumns="False" Grid.Row="0"
                  EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding ProductId}" 
                                    Header="Id" Width="SizeToHeader"
                                    IsReadOnly="True"/>
                <DataGridTextColumn Binding="{Binding Name}" Header="Имя" 
                                    Width="SizeToHeader" IsReadOnly="True"/>
                <DataGridTextColumn Binding="{Binding Category.Name}" Header="Категория" Width="*"/>
            </DataGrid.Columns>
        </DataGrid>
 
 
 
        <TextBox Width="200" Height="30" x:Name="nameTB" Grid.Row="1"/>
        <ComboBox Width="200" Height="30" x:Name="categoryCB" 
                  SelectedItem="{Binding Categories}" DisplayMemberPath="Name" Grid.Row="2"/>
 
        <Button Content="Добавить" HorizontalAlignment="Center" Click="Button_Click" Height="20" Width="123" Grid.Row="3"/>
    </Grid>
</Window>
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System.Windows;
using System;
using System.Linq;
 
namespace SQLite_Probe
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private readonly ProductContext db = new ProductContext();
 
        public MainWindow()
        {
            InitializeComponent();
            categoryCB.ItemsSource = db.Categories.ToList();
 
            var query =
                from p in db.Products
                join c in db.Categories on p.ProductId equals c.CategoryId
                select p;
 
            productsDataGrid.ItemsSource = query.ToList();
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string name = nameTB.Text.ToString();
            var category = categoryCB.SelectedValue as Category;
 
            bool checkIsExist = db.Products.Any(x => x.Name == name);
            if (checkIsExist == false)
            {
                Product p = new Product()
                {
                    Name = name,
                    CategoryId = category.CategoryId
                };
 
                try
                {
                    db.Products.Add(p);
                    db.SaveChanges();
 
                    db.SaveChanges();
                    var query =
                        from pr in db.Products
                        join c in db.Categories on pr.ProductId equals c.CategoryId
                        select pr;
 
                    productsDataGrid.ItemsSource = query.ToList();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
            }
        }
    }
}
Контекст
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using Microsoft.EntityFrameworkCore;
 
namespace SQLite_Probe
{
    public class ProductContext : DbContext
    {
        public DbSet<Product> Products { get; set; }
        public DbSet<Category> Categories { get; set; }
 
        public ProductContext()
        {
            Database.EnsureCreated();
        }
 
        protected override void OnConfiguring(
            DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite("Data Source = DataBase.db"); 
            optionsBuilder.UseLazyLoadingProxies();
        }
    }
}
Сущность Product
C#
1
2
3
4
5
6
7
8
9
10
11
namespace SQLite_Probe
{
    public class Product
    {
        public int ProductId { get; set; }
        public string Name { get; set; }
 
        public int CategoryId { get; set; }
        public virtual Category Category { get; set; }
    }
}
Сущность Category
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
 
namespace SQLite_Probe
{
    public class Category
    {
        public int CategoryId { get; set; }
        public string Name { get; set; }
 
        public virtual ICollection<Product>
        Products { get; private set; } = new ObservableCollection<Product>();
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.02.2023, 21:23
Ответы с готовыми решениями:

Сохранить из формы данные в таблицу, при том чтобы данные добавлялись а не заменялись
Здравствуйте. Нужно сохранить из формы данные в таблицу при том чтобы данные добавлялись а не заменялись)) и еще одна проблемка не знаю как...

Как узнать, есть ли данные в textbox2, чтобы другие данные добавлялись в textbox3 из combobox?
как узнать есть данные в textbox2 чтобы другие данные добавлялись textbox3 из combobox

есть форма нужно чтобы данные добавлялись в таблицу БД
есть форма нужно чтобы данные добавлялись в таблицу БД но почему то не получается вот код форма: &lt;form name...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2023, 21:23
Помогаю со студенческими работами здесь

Нужно сделать так, чтобы данные из одной таблицы (например, несколько имен) добавлялись в столбец другой
Пытался найти, как сделать так, чтобы в столбец whoworkout таблицы respisanie добавлялись данные из таблицы klients столбца fullname ...

Подставить автоматически данные из ComboBox в столбец DatagridView таблицы при создании новой записи в строке
Здравствуйте! подскажите пожалуйста как реализовать автоматическую подстановку данных из ComboBox в нужный столбец DatagridView, таблицы...

Нужно сделать чтобы так: вот есть у меня в Memo данные, мне надо чтобы при нажатии на кнопку визуализация на Image рисовались слои, на них писались ци
Нужно сделать чтобы так: вот есть у меня в Memo данные, мне надо чтобы при нажатии на кнопку визуализация на Image рисовались слои, на них...

Как сделать, чтобы в форме при добавление новых записей эти записи добавлялись в базу данных
Как сделать что бы в форме при добавление новых записей эти записи добавлялись в базу данных

Что надо изменить, чтобы данные отправлялись на сервер только при положительном прохождении проверки?
Имеется функция TestData(), проверяющая корректность введенных в форму данных и возвращающая значение true/false. Что надо изменить в...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Настройка записи справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru