#c# #asp.net-core #.net-core #entity-framework-core #entity-framework-migrations
#c# #asp.сетевое ядро #.net-ядро #сущность-структура-ядро #сущность-структура-миграции
Вопрос:
Я пытаюсь использовать новый пакет миграции ядра EF для обновления схемы базы данных.
Я создал пакет, используя:
dotnet ef migrations bundle --self-contained --runtime linux-x64
Но когда я попытался обновить базу данных с помощью:
./efbundle --connectionString ${MY_CONNETION_STRING}
Или даже получить помощь от:
./efbundle --help
Я получаю следующую ошибку:
./efbundle: ошибка перемещения: ./efbundle: символ nanosleep версии GLIBC_2.2.5 не определен в файле libpthread.so.0 со ссылкой на время ссылки
Однако, если я перемещу efbundle
файл в publish
каталог, все, кажется, работает.
Итак, мой вопрос: всегда ли я должен помещать efbundle
файл в publish
папку? Или я могу поместить его куда угодно и применить миграции к базе данных, поскольку это автономный исполняемый файл?
Если нет, то какой смысл использовать пакет миграций?
Комментарии:
1. Я не уверен, но подозреваю, что для этого требуется ваша библиотека DLL приложения для контекста.
--self-contained
устраняет требование к развертыванию платформы обычно, если вы хотите предоставить один файл при сборке, вам также необходимо указать другой параметр, например :/p:PublishSingleFile=true
поэтому вам нужно либо скопировать его в папку публикации, либо скопировать необходимые библиотеки DLL вместе.2. Я обнаружил, что проблема возникает только при установке SDK с помощью snap. Установка с помощью APT работает, как и ожидалось. Я думаю, что проблема в оснастке.
Ответ №1:
ОК. Я установил SDK DotNet на свою машину Ubuntu с помощью snap. Но после того, как я переустановил его с помощью apt, теперь он работает из любого места. Похоже, что проблема в установке snap (я также сталкивался с другими проблемами EF раньше). Но все же я не уверен, возможно ли/как устранить проблему при установке snap.