Копирование база данных. Entity Framework02.05.2018, 13:22. Показов 12520. Ответов 22
Метки нет (Все метки)
Привет, есть удалённая база данных, есть локальная.
Локальная база данных служит исключительно только для чтения. Я хочу скопировать записи из удаленной база дынных в локальную. Делаю так. Запрашиваю по 10 записей с удаленной базы и просто вставляю их в локальную. Для сохранения индекса я задаю в контексте свойство.
Моя модель данных.
Вставка в локальную.
Подскажите, как мне исправить ситуацию? У меня там связанные данных SectionsId ссылается на Id. И как мне все это грамотно скопировать с сохранением связей? Спасибо! Добавлено через 6 минут У меня Id разный.
0
|
||||||||||||||||||||||||||
| 02.05.2018, 13:22 | |
|
Ответы с готовыми решениями:
22
Entity Framework: Изменилась база данных, что и как поменять в приложении, чтобы оно работало? В чем разница между Entity Framework и Entity Framework Core? |
|
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,328
|
|
| 02.05.2018, 16:27 | |
|
updaite, ну и что вам в сообщении об ошибке не понятно? Нельзя вставить две и более записей с одинаковым значением первичного ключа. В тексте ошибки так и сказано.
0
|
|
|
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,328
|
|
| 02.05.2018, 17:11 | |
|
updaite, что значит "откуда"? Когда вы аттачите к контексту сущность и сотворяете над ней "Add", то все её зависимости, которые контексту не известы, тоже встают в очередь на добавление.
Если кратко и на пальцах: если вы вставляете в базу сущности "А" и "Б", которые ссылаются на "В", то "А" вставит "В", а вставка "Б" зафейлится с той ошибкой, которую вы и имеете, так как будет попытка повторной вставки "В". Ну и если локальная база не пустая, то дубликаты вообще нормальное дело.
0
|
|
|
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,328
|
|
| 02.05.2018, 19:20 | |
|
updaite, я бы такое переносил чистым SQL, без всяких ORM, которые тут больше мешаются, чем помогают. Основная идея: проверять наличие записи, перед переносом.
0
|
|
| 02.05.2018, 19:31 [ТС] | |
|
Usaga, Я не понимаю, в удалённой базе есть 4 записи, которые ссылаются друг на друга в одной таблицы. Я их забираю от удаленной и просто вставляю в уделённую базу. AddRange они же существуют в коллекции. На чистом sql уже не выйдет, проект на EF. Переделывать время. По-любому можно как нибудь перенести эти данные без всяких ошибок.
0
|
|
|
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,328
|
|
| 02.05.2018, 19:35 | |
|
updaite, я вам уже объяснил суть проблемы: не надо вставлять то, что уже вставлено. EF тут не виноват ни в чём.
0
|
|
| 02.05.2018, 19:42 [ТС] | |
|
Usaga, Я понимаю, что вы имеете ввиду. Но я хочу сделать это так. Есть база пустая табличка, в эту пустую табличку я вставляю данные 4 штуки. Методом AddRange, эти записи связанны. Мне не нужно вставлять связанные записи автоматически, я хочу это делать кодом, методом AddRange. Ибо я на 100% уверен, что табличка пустая. Мой вопрос заключается в том, как отключить автоматическое создание сущности, или как разом вставить связанные сущности в базу данных. Проверки совсем не нужны наиналичие, я только создал эту бд и все копирую в неё.
0
|
|
|
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,328
|
|
| 02.05.2018, 19:45 | |
|
updaite, я вам ещё раз повторяю: проверка уникальности первичного ключа происходит в самой СУБД. Это неотъемлемая часть сохранения целостности данных.
Если вы хотите обойти ошибку, что описана в данной теме, то вам придётся проверять наличие записи с ID равным ID вставляемой записи. Всё.
0
|
|
| 02.05.2018, 19:47 [ТС] | |
|
Есть вариант решения такой, что я кодом связываю эти записи: 1 объект родитель, 2 объект ссылается на подителя, 3 объект ссылается на 2 объект и т.д.
В итоге я вставляю только один 1 объект, остальные создаются. Но почему я не могу просто взять из одной базы все записи и просто вставить в другую.
0
|
|
|
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,328
|
||
| 02.05.2018, 19:48 | ||
Сообщение было отмечено updaite как решение
Решение
0
|
||
|
|
||
| 02.05.2018, 20:24 | ||
|
Если уж эта БД только для чтения и она является типа полной копией, то Точно нужно отключить генерацию ID и других ключей. Иначе эти данные Не будут идентичны. Полная идентичность возможна только при зеркализации или извращённых копированиях, но направленных на полное сохранение идентичности. Поэтому отключайте автогенерацию и всё у вас будет работать. (при условии конечно что конечная таблица действительно пустая). А в таком случае я бы тоже сделал копирование через процедуру. Она сделает быстрее и без ненужных затрат ресурсов при копировании.
0
|
||
| 03.05.2018, 11:28 [ТС] | ||||||||||||||||
|
Начинаю проверять, есть ли уже запись в БД или нет.
Получаю.
ив меняДобавлено через 14 минут Сделал.
0
|
||||||||||||||||
|
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,328
|
|
| 03.05.2018, 11:46 | |
|
updaite, может проще сносить локальную базу и данными с удалённой полностью наполнять? Ведь, если локальная база у вас только для чтения, то новых данных в ней не появится без вашего ведома. А так вы тупую работу совершаете ища и обновляя существующие записи.
0
|
|
| 03.05.2018, 12:03 [ТС] | |
|
Usaga, Тоже как вариант, но она используется постоянно, сносить не могу и подменять тоже во время исполнения.
Этим кодом который выше, я просто наполняю чистую базу данных. Действительно, связанные сущности создавались автоматически, их я просто обновляю на свои, которые не успел вставить. Самое веселое у меня сейчас, сравнение по Hash таблице. Гляну совпадают ли хеши или нет. Хорошее решение требует времени, а времени у меня нет. Пожертвую производительностью, нагрузка на чтение не очень большая. 1 запрос в 5 сек. А вот к удалённой может быть и больше, поэтому ни хочу сжирать трафик, проще кусками обновлять со стороны клиента (Локалки) и все сравнения производить здесь же.
0
|
|
|
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,328
|
|||
| 03.05.2018, 12:15 | |||
|
Если же вы попытаетесь выполнить перенос в одну транзакцию с высоким уровнем изоляции (как минимум Read Commited Snapshot), то вы "взвесите" удалённую базу, ибо другие транзакции встанут в очередь пока текущая не завершится. А завершаться она может долго, в зависимости от количества данных. В общем, тут надо крепко подумать что и как делать. Выбранный вами подход сильно не оптимален и чреват хренью в базе.
0
|
|||
| 03.05.2018, 12:48 [ТС] | ||
|
Есть сущности А, Б. Сущность А ссылается на сущность Б. При добавлении сущности А, база автоматически создаёт сущность Б, а сущность Б у меня уже есть, я ее просто обновляю на свою. Как бы вы реализовали? Такое обновление? Мб как нибудь средствами SQL Server упаковывать таблицу в файл, а потом этот файл загружать и распаковывать на локалке?
0
|
||
|
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,328
|
|||
| 03.05.2018, 12:59 | |||
|
1
|
|||
| 03.05.2018, 13:27 [ТС] | |
|
Usaga, Я уже почти все сделал. Переделывать не буду, если ничего серьёзного возникать не будет. Времени на это нет. Сделал мнение, что все ORM включая EF шляпа. Лучше на чистом SQL все делать.
0
|
|
| 03.05.2018, 13:27 | |
|
Помогаю со студенческими работами здесь
20
Автообновление данных с Entity Framework Обновление данных в Entity Framework
Entity Framework не создает базу данных Синхронизация баз данных Entity Framework Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|