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

Исключение при попытке удалить элемент в БД, полученный из DataGrid

23.04.2022, 14:16. Показов 1285. Ответов 10

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void Button_Click_1(object sender, RoutedEventArgs e)
        {
 
           var v = DGridStudents.SelectedItems.Cast<Students_>().ToList();
          if (MessageBox.Show($"Вы точно хотите следующие {v.Count()} элементы?", "Внимание", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
            {
                try
                {
                    BulTestEntities.GetContext().Students_.RemoveRange(v);
                    BulTestEntities.GetContext().SaveChanges();
                    MessageBox.Show("Данные удалены");
                    DGridStudents.ItemsSource = BulTestEntities.GetContext().Students_.ToList();
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
            }
        }
Stusents_ - таблица в базе данных, которая выводится в DGridStudent

Исключение следующее: Unable to update the EntitySet 'Students_'- because it has a DefiningQuery and no <DeleteFunction> element exist in the <ModificationFunctionMapping> element to support current operation
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2022, 14:16
Ответы с готовыми решениями:

Исключение при попытке добавить элемент в БД (entity framework)
Пытаюсь сохранить объект в БД: public void Add(EntityModels entity) { ...

Вылетает приложение при попытке удалить элемент из SQL таблицы в диалоговом окне
Лог: E/AndroidRuntime: FATAL EXCEPTION: main Process: user.adprediction, PID: 2804 ...

Выбрасывается исключение при попытке подключения к БД
При запуске кода выдает исключение, classpath настроил. Не знаю, что делать. В чем может быть проблема? import java.sql.*; import...

10
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,141
Записей в блоге: 2
23.04.2022, 16:09
Цитата Сообщение от Amurmurmur Посмотреть сообщение
Исключение при попытке удалить элемент DataGrid
Вы неверно определили причину и места ошибки.
Ошибка у вас скорее всего возникает после вызова метода ...SaveChanges(); из-за того, что для вашей реализации EntitySet невозможно выполнить метод BulTestEntities.GetContext().Students_.RemoveRange(v);.
Как исправить это - не знаю.

Ответ лучше искать в разделе ADO - куда и переношу тему.
Название тему тоже привожу в соответчики указанной вами ошибке.
0
0 / 0 / 0
Регистрация: 03.04.2022
Сообщений: 35
24.04.2022, 09:17  [ТС]
Да, вы правы, после SaveChange возникает исключение
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,141
Записей в блоге: 2
24.04.2022, 09:22
Цитата Сообщение от Amurmurmur Посмотреть сообщение
после SaveChange
Покажите реализацию типа BulTestEntities.
Для ответа на ваш вопрос надо понимать что возвращает метод GetContext().
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,141
Записей в блоге: 2
24.04.2022, 09:23
Amurmurmur, по интерфейсу Форума:
 Комментарий модератора 
При обращении к другому пользователю указывайте его ник в тегах [NICK][/NICK] или цитируйте часть сообщения на которое отвечаете.
В противном случае ему не придёт уведомление о вашем обращении и вы можете не дождаться ответа на своё сообщение.

Для вставки ника: введите ник, выделите его и нажмите кнопку "Динамик" на панели редактора сообщений.
Или кликните по нику автора сообщения в панели слева от текста его сообщения.

Для вставки цитаты: выделите нужную цитату, должна появиться всплывающая кнопка "Цитировать", нажмите её.
0
0 / 0 / 0
Регистрация: 03.04.2022
Сообщений: 35
24.04.2022, 09:41  [ТС]
Элд Хасп

C#
1
2
3
4
5
6
7
8
9
10
11
        private static BulTestEntities _context;
        public BulTestEntities()
        : base("name=BulTestEntities")
        {
        }
        public static BulTestEntities GetContext()
        {
            if (_context == null)
                _context = new BulTestEntities();
            return _context;
        }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,141
Записей в блоге: 2
24.04.2022, 09:52
Amurmurmur, BulTestEntities - это что?
Наследуется от DbContext из EF?
Если да то покажите какие таблицы в нём заданы.

И метод GetContext() в этом классе выглядит весьма бессмысленно.
Если где-то нужен незакрываемый экземпляр Контекста БД, то его нужно создавать по месту использования, а не здесь.
0
0 / 0 / 0
Регистрация: 03.04.2022
Сообщений: 35
24.04.2022, 09:58  [ТС]
Элд Хасп
Я не знаю, как картинки прикреплять, сделала так
Миниатюры
Исключение при попытке удалить элемент в БД, полученный из DataGrid  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,141
Записей в блоге: 2
24.04.2022, 10:26
Цитата Сообщение от Amurmurmur Посмотреть сообщение
как картинки прикреплять, сделала так
Не картинки нужны, а полностью код класса BulTestEntities.
0
0 / 0 / 0
Регистрация: 03.04.2022
Сообщений: 35
24.04.2022, 10:39  [ТС]
Элд Хасп
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 public partial class BulTestEntities : DbContext
    {
        private static BulTestEntities _context;
        public BulTestEntities()
        : base("name=BulTestEntities")
        {
        }
        public static BulTestEntities GetContext()
        {
            if (_context == null)
                _context = new BulTestEntities();
            return _context;
        }
 
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        public virtual DbSet<Grupa_> Grupa_ { get; set; }
        public virtual DbSet<sysdiagrams> sysdiagrams { get; set; }
        public virtual DbSet<Tops_> Tops_ { get; set; }
        public virtual DbSet<register1> register1 { get; set; }
        public virtual DbSet<Students_> Students_ { get; set; }
    
        public virtual int TestProcedure_(Nullable<int> id, Nullable<int> idTema, string fIO, string rezult, Nullable<System.DateTime> data, Nullable<int> code_Group)
        {
            var idParameter = id.HasValue ?
                new ObjectParameter("id", id) :
                new ObjectParameter("id", typeof(int));
    
            var idTemaParameter = idTema.HasValue ?
                new ObjectParameter("idTema", idTema) :
                new ObjectParameter("idTema", typeof(int));
    
            var fIOParameter = fIO != null ?
                new ObjectParameter("FIO", fIO) :
                new ObjectParameter("FIO", typeof(string));
    
            var rezultParameter = rezult != null ?
                new ObjectParameter("Rezult", rezult) :
                new ObjectParameter("Rezult", typeof(string));
    
            var dataParameter = data.HasValue ?
                new ObjectParameter("Data", data) :
                new ObjectParameter("Data", typeof(System.DateTime));
    
            var code_GroupParameter = code_Group.HasValue ?
                new ObjectParameter("Code_Group", code_Group) :
                new ObjectParameter("Code_Group", typeof(int));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("TestProcedure_", idParameter, idTemaParameter, fIOParameter, rezultParameter, dataParameter, code_GroupParameter);
        }
    
        public virtual int TestProcedure_1(Nullable<int> id, Nullable<int> idTema, string fIO, string rezult, Nullable<System.DateTime> data, Nullable<int> code_Group)
        {
            var idParameter = id.HasValue ?
                new ObjectParameter("id", id) :
                new ObjectParameter("id", typeof(int));
    
            var idTemaParameter = idTema.HasValue ?
                new ObjectParameter("idTema", idTema) :
                new ObjectParameter("idTema", typeof(int));
    
            var fIOParameter = fIO != null ?
                new ObjectParameter("FIO", fIO) :
                new ObjectParameter("FIO", typeof(string));
    
            var rezultParameter = rezult != null ?
                new ObjectParameter("Rezult", rezult) :
                new ObjectParameter("Rezult", typeof(string));
    
            var dataParameter = data.HasValue ?
                new ObjectParameter("Data", data) :
                new ObjectParameter("Data", typeof(System.DateTime));
    
            var code_GroupParameter = code_Group.HasValue ?
                new ObjectParameter("Code_Group", code_Group) :
                new ObjectParameter("Code_Group", typeof(int));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("TestProcedure_1", idParameter, idTemaParameter, fIOParameter, rezultParameter, dataParameter, code_GroupParameter);
        }
    
        public virtual int TestProcedure_2(Nullable<int> idTema, string fIO, string rezult, Nullable<System.DateTime> data, Nullable<int> code_Group)
        {
            var idTemaParameter = idTema.HasValue ?
                new ObjectParameter("idTema", idTema) :
                new ObjectParameter("idTema", typeof(int));
    
            var fIOParameter = fIO != null ?
                new ObjectParameter("FIO", fIO) :
                new ObjectParameter("FIO", typeof(string));
    
            var rezultParameter = rezult != null ?
                new ObjectParameter("Rezult", rezult) :
                new ObjectParameter("Rezult", typeof(string));
    
            var dataParameter = data.HasValue ?
                new ObjectParameter("Data", data) :
                new ObjectParameter("Data", typeof(System.DateTime));
    
            var code_GroupParameter = code_Group.HasValue ?
                new ObjectParameter("Code_Group", code_Group) :
                new ObjectParameter("Code_Group", typeof(int));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("TestProcedure_2", idTemaParameter, fIOParameter, rezultParameter, dataParameter, code_GroupParameter);
        }
    
        public virtual int ProcedurePass1(string password)
        {
            var passwordParameter = password != null ?
                new ObjectParameter("password", password) :
                new ObjectParameter("password", typeof(string));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("ProcedurePass1", passwordParameter);
        }
    
        public virtual int ProcedurePass2(string password)
        {
            var passwordParameter = password != null ?
                new ObjectParameter("password", password) :
                new ObjectParameter("password", typeof(string));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("ProcedurePass2", passwordParameter);
        }
    }
}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,141
Записей в блоге: 2
24.04.2022, 15:12
Amurmurmur, откуда у вас такая странная привычка к нижнему слешу в именах?
Согласно Правил Именования нижней слеш недолжен использоваться и именах.

Так же имейте ввиду, вы используете EF, а он по умолчанию выстраиваете ассоциации между типами и таблицами согласно правил английского языка.
Вы скорее всего, не задаёте а явную ассоциацию, следовательно будет срабатывать ассоциация по умолчанию.
А с используемыми вами именами, она может не всегда сработать.
В результате можете получить непонятно откуда взявшуюся ошибку.

Пример правильные имён:
C#
1
2
public DbSet<Group> Groups { get; set; }
public DbSet<Student> Students { get; set; }
Цитата Сообщение от Amurmurmur Посмотреть сообщение
Unable to update the EntitySet 'Students_'- because it has a DefiningQuery and no <DeleteFunction> element exist in the <ModificationFunctionMapping> element to support current operation
Возможно ошибка связана с самой БД.
Попробуйте удалить первичный ключ и потом заново его задать.

Посмотрите какой какой будет результат удаления единичной записи:
C#
1
2
3
var st = BulTestEntities.GetContext().Students_.Firs();
BulTestEntities.GetContext().Remove(st);
BulTestEntities.GetContext().SaveChanges();
И метод BulTestEntities.GetContext() смотрится очень несуразно.
Создайте нормальную VM, в ней поле для для экземпляра BulTestEntities и работайте с ним.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.04.2022, 15:12
Помогаю со студенческими работами здесь

Исключение при попытке удаления файла БД
Здравствуйте. Ковыряю приложение свое для работы с книгами и реализация бд к ним. Есть в приложении функция подобие сохранения и...

Сокеты. Исключение при попытке переподключения
Всем доброго времени суток! Столкнулся с проблемой в осваивании сокетов. Необходимо написать простое клиент-серверное приложение,...

Исключение при попытке вывести изображение
У меня выдает исключение на эту строку My_img.SetValue(Image.SourceProperty,...

Вылетает исключение при попытке получить внешний IP
Пытаюсь получить внешний IP адрес с помощью библиотеки NATUPNPLib, но вылетает исключение COMException. using System; using...

Исключение при попытке вызвать QFileDialog::getOpenFileName
Доброго времени суток. При попытке выбора файла с помощью QFileDialog::getOpenFileName Получаю исключение: Вызвано исключение по...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru