Подтвердить что ты не робот

Ошибка 3002: проблема с отображением фрагментов | С# linq для объектов

У меня есть консольное приложение, и что я пытаюсь сделать, так это то, что каждый раз, когда выполняется приложение, дата и время отправляются в таблицу в моей базе данных.

Структура таблицы выглядит так:

FTPRuns

ID int

Last Run datetime

Прост достаточно.

Я обновил model.edmx в своем приложении, чтобы отразить это новое изменение. Однако теперь я получаю следующую ошибку, и я не совсем уверен, что это значит.

Ошибка 3002: проблема при сопоставлении фрагменты, начинающиеся с линии 1330: Потенциальное нарушение времени выполнения таблицы FTPRuns (FTPRuns.ID): Столбцы (FTPRuns.ID) сопоставляются с Свойства EntitySet FTPRuns (FTPRuns.ID) на концептуальной стороне но они не образуют EntitySet ключевые свойства (FTPRuns.ID, FTPRuns.LastRun).

Вот фрагмент кода, который я использую для обновления базы данных:

 using (ModelContainer ctn = new ModelContainer())
            {
                try
                {
                    FTPRun ftp = new FTPRun
                    {
                        LastRun = DateTime.Now
                    };

                    ctn.FTPRuns.AddObject(ftp);

                    int changes = ctn.SaveChanges();

                    Console.WriteLine(changes.ToString() + " Changes saved");
                    Console.WriteLine("The LastRun Date Has Been Updated");
                }
                catch (InvalidOperationException ex)
                {
                     Console.WriteLine(ex.ToString());
                }
            }

Если кто-нибудь может мне помочь, я был бы очень благодарен:)

спасибо.

4b9b3361

Ответ 1

Ваша модель сущности имеет комбинацию двух свойств FTPRuns.ID и FTPRuns.LastRun как ключ сущности, тогда как ваша таблица имеет только столбец FTPRuns.ID в качестве первичного ключа. Поэтому в вашей модели вы указываете, что комбинация FTPRuns.ID и FTPRuns.LastRun должна быть уникальной, в то время как ваша база данных имеет более сильное требование, чтобы только FTPRuns.ID было уникальным.

Просто исключите свойство FTPRuns.LastRun из ключа сущности. Возможно, это произошло случайно или Entity Framework не смог получить информацию первичного ключа из базы данных и должен был вывести ключ сущности. Например, представления не имеют первичного ключа, а Entity Framework выведет ключ сущности как комбинацию всех столбцов, не подлежащих обнулению.

Ответ 2

это произошло со мной, когда я изменил ключевое поле в таблице (в базе данных) и обновил модель сущности.

Старый код все еще присутствовал в модели, поэтому я зашел в свойства объекта в файле .edmx и установил ключ в False. Это исправило это.

Ответ 3

Решение Daniel Brückner отлично работало для меня! Ниже, по сути, он инструктировал, но в графическом виде - что может помочь ленивым читателям:).

То, что вы хотите посмотреть, это то, что ваш ПК в модели i.e.

введите описание изображения здесь

Мы видим, что у меня есть PK, называемый id. Теперь, если я посмотрю на свою модель EF:

введите описание изображения здесь

Я вижу только один указанный ключ, который является правильным. Для меня это было не так, все четыре столбца были ключами.

Если вы щелкните правой кнопкой мыши по столбцу (на диаграмме EF на VS), вы получите возможность отмечать/отключать Entity Key:

введите описание изображения здесь

Убедитесь, что это соответствует вашей модели. В моем случае нужно отметить только id, сохранить и построить проект.

Ответ 4

Я удалил таблицу из edmx (в edmx выберите таблицу, вызывающую проблему → щелкните правой кнопкой мыши → удалить) а затем выполнить "обновленную модель из базы данных"

который зафиксировал это для меня

Ответ 5

Я удалил объект и класс из Обозревателя моделей и сделал обновление из базы данных, чтобы выбрать таблицу. Это разрешило проблему для меня.

Ответ 6

Я забыл установить первичный ключ при создании новой таблицы, поэтому я пошел в SQL Management Studio для этого. После этого я обновил файл model.edmx, чтобы отразить изменения и получил ошибку 3002.

То, что он сделал при обновлении модели, заключалось в том, чтобы установить все столбцы таблицы как "ключи сущностей". Поэтому, просматривая файл model.edmx, найдите соответствующую таблицу и щелкните правой кнопкой мыши по различным свойствам, чтобы убедиться, что выбран только первичный ключ "Entity key". Это решило мою проблему.

Ответ 7

Я удалил все таблицы из edmx, а затем "Обновить модель из базы данных". Также проверьте наличие владельца базы данных.

Ответ 8

Проверьте основной ключ для таблицы, если он существует, тогда 1) Откройте файл .edmx, выберите все таблицы и Удалить из модели. 2) Обновить модель из БД и снова добавить все необходимые таблицы