Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Я только начинаю изучать ASP.NET и связанные с ним технологии, поэтому буду очень признателен за любую конструктивную критику с пояснениями. Структура созданная при помощи EF Code First. Приведена ниже. http://www.screencapture.ru/file/7d6c75dA Есть предположение, что надо работать с сущностями не зависимо от контекста, т.е. я так понял, что все действия только через currentCustomer которого мы извлекаем один раз, допустим равного Код: c# 1. Так как доступ к базе данных надо минимизировать, то хотелось бы, что бы в начале все изменения были занесены в объект currentCustomer класса Customer или в коллекции связанные с ним Orders или OrderLines, а потом уже при выходе все сохранялось бы в БД один раз скопом, если это конечно возможно. Но столкнулся с проблемой при удалении двух и более объектов из коллекции OrderLine выдается сообщение Операция завершилась с ошибкой. Не удалось изменить связь, поскольку один или несколько свойств внешнего ключа не допускают значения NULL. При изменении связи соответствующему свойству внешнего ключа присваивается значение NULL. Если внешний ключ не поддерживает значений NULL, должна быть определена новая связь, свойству внешнего ключа должно быть присвоено другое значение, отличное от NULL, либо необходимо удалить несвязанный объект. Тоже сообщение выдается при выполнении следующей последовательности действий над коллекцией OrderLines удалили элемент из коллекции-> добавили элемент -> попытка сохранения... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 13:24 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 13:31 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Паганель, Ок, а как нить перепубликовать в другой ветке текущий пост нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 13:33 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
нажмите кнопку "Сообщить модератору" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 13:34 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Паганель, Спасибо, я уже занового перезабил. Здесь есть система поощрений каких нибудь, могу я вам "увеличить рейтинг" или что ли бо в этом духе, за то что откликнулись?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 13:36 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Рейтинг? Не слыхал про такое :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 13:41 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Gigant007, Покажите код ваших манипуляций. Как удаляете объект из контекста? DeleteObject()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 15:57 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
beowulf-da, Нет я прочел, что DeleteObject() работает только через контекст, а хочу работать исключительно с сущностью. Код следующий Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 16:18 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Gigant007, Remove не удаляет объект из контекста. Вам нужен как раз DeleteObject(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 16:31 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Все поля являются имеют свойство nullable: false. Если сделать поле OrderId у класса OrderLine nullable: true, то функция Remove просто удаляет значение из этого свойства и запись OrderLine остается в базе, но со значением null. Подскажите пожалуйста способ удаления записей из БД которые отсутствуют в сущности. Если такое не возможно, то тогда другой вариант решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 16:33 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Gigant007Есть предположение, что надо работать с сущностями не зависимо от контекстаВсе сущности (те, которые должны храниться в БД) принадлежат контексту. Можно создать новую сущность отдельно, но, чтобы она сохранилась в БД, её нужно добавить в контекст. Ваш Remove удаляет OrderLine из Order, но в контексте он остаётся с "занулённой" связью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 16:38 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Gigant007Подскажите пожалуйста способ удаления записей из БД которые отсутствуют в сущности. Замените Код: c# 1. на что-то типа: Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 16:44 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
beowulf-daВсе сущности (те, которые должны храниться в БД) принадлежат контексту. Можно создать новую сущность отдельно, но, чтобы она сохранилась в БД, её нужно добавить в контекст. Я тоже так думал, но тогда непонятно почему и как работает следующий код Код: c# 1. 2. 3. 4. 5. 6. 7. 8. где CurrentCustomer присваивается следующим образом Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 16:49 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Gigant007, Да и цикл тут не нужен. У вас же Id передаётся в метод. Требуемый OrderLine вы можете из контекста по Id получить, не перебирая все Order. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 16:49 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
beowulf-da, Это я знаю, просто говорю же придерживался концепции работы с конкретной сущностью, а не с контекстом. Но вопрос в другом почему добавление данных через сущность получается реализовать, а удаление нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 16:56 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Gigant007Я тоже так думал, но тогда непонятно почему и как работает следующий код Код: c# 1. 2. 3. 4. 5. 6. 7. 8. Такое добавление сущностей допускается. И ваш объект orderLine, который до добавления не принадлежал контексту, оказывается внутри и сохраняется в базу. Gigant007как работает следующий кодМожете рефлектором посмотреть как именно))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 17:01 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
beowulf-da, Я понял, в любом случае необходимо работать с контекстом. Спасибо огромное! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 17:10 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Gigant007Это я знаю, просто говорю же придерживался концепции работы с конкретной сущностью, а не с контекстом.Кстати, что это за концепция такая? Gigant007Но вопрос в другом почему добавление данных через сущность получается реализовать, а удаление нет?EF так устроен. Ну и это логично. Когда вы добавляете свой новый объект - на него точно ссылается только 1 объект Order. А вот при удалении - на него могут ссылаться другие Order, значит просто так (через Remove) удалять его нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 17:10 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
beowulf-daGigant007Это я знаю, просто говорю же придерживался концепции работы с конкретной сущностью, а не с контекстом.Кстати, что это за концепция такая? Ну это даже не концепция, а скорее мое представление того, что EF должна быть максимально ориентирована на сущность, т.е. вся работа должна производиться с непосредственной сущностью, а не через контекст. И это работает, как с добавлением сущностей, так и с редактированием. beowulf-daGigant007Но вопрос в другом почему добавление данных через сущность получается реализовать, а удаление нет?EF так устроен. Ну и это логично. Когда вы добавляете свой новый объект - на него точно ссылается только 1 объект Order. А вот при удалении - на него могут ссылаться другие Order, значит просто так (через Remove) удалять его нельзя. Не только удаление, но и редактирование можно произвести непосредственно в сущности. А получается из того, что Вы написали на счет ордера неверно, т.к. у OrderLine есть одного поле OrderId, которое указывает какой именно Order на него ссылается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 17:32 |
|
||
|
Ошибка при удалении и добавлении записи из сущности EF CodeFirst в MS SQL
|
|||
|---|---|---|---|
|
#18+
Кстати вот описание того как связывается DbContext с entity и как работает SaveChange http://msdn.microsoft.com/en-US/data/jj592676 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 10:38 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38351901&tid=1358220]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
78ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 432ms |

| 0 / 0 |
