. net core EF: удаление-миграция не удаляет файлы миграции - PullRequest
0 голосов
/ 20 марта 2020

Я пытался использовать миграцию базы данных для создания исходной структуры таблицы и некоторых данных заполнения для моей базы данных. Поэтому я создал две миграции: InitialCreate и InitialSeed. Пока все хорошо, ModelSnapshot.cs заполнен, и создаются файлы миграции.cs. Но теперь, когда я добавляю другую миграцию, я больше не могу ее удалить. Например: я изменил вспомогательную таблицу и назвал

add-migration test 

Теперь у меня есть файлы 321321321_test.cs и 321321321_test.Designer.cs - пока все хорошо. Но когда я звоню

remove-migration

, эти файлы больше не удаляются. Там нет сообщений об ошибках, он просто ничего не удаляет. Это вывод консоли диспетчера пакетов:

PM> remove-migration
Build started...
Build succeeded.
Microsoft.EntityFrameworkCore.Model.Validation[30000]
      No type was specified for the decimal column 'Totalprice' on entity type 'BillSelectEntity'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
      Entity Framework Core 3.1.0 initialized 'OphiContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
Reverting model snapshot.
Done.

У вас есть идеи, почему это может происходить? Есть ли место, где я могу посмотреть на сам фреймворк и посмотреть, что на самом деле делает «удаление-миграция», чтобы попытаться найти проблему? Любые намеки приветствуются.

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Ладно, похоже, я нашел ответ на свой вопрос: https://www.ophidia.net/en/remove-migration-doesnt-remove-the-migration-files/

Короче говоря: миграция не может обработать таблицу со значениями по умолчанию:

modelBuilder.Entity<Profession>(entity =>
{
    entity.Property(e => e.Name)
        .IsUnicode(false)
        .HasDefaultValueSql("('')"); // this line is the problem
});

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

0 голосов
/ 20 марта 2020

Есть ли у вас 1-слойное приложение или N-слойное приложение? Вы пытались указать context? Вы пытались указать startup project и / или project, где EF?

Это может дать вам подсказку, проект называется с и Laboratory.API.csproj и Laboratory.Infrastructure.csproj

Команда CLI , когда вы находитесь в каталоге / api:

dotnet ef --startup-project Laboratory.API.csproj --project ..\Laboratory.Infrastructure\Laboratory.Infrastructure.csproj migrations remove --context LaboratoryContext

Структура дерева:

├── Dockerfile
├── Laboratory.API
|  ├── Application
|  ├── appsettings.json
|  ├── Controllers
|  ├── healthcheck-ui.css
|  ├── Laboratory.API.csproj
|  ├── Program.cs
|  ├── Properties
|  ├── Startup.cs
├── Laboratory.Domain
|  ├── AggregateModel
|  ├── Exceptions
|  ├── Laboratory.Domain.csproj
|  └── SeedWork
├── Laboratory.Infrastructure
|  ├── EntityConfigurations
|  ├── Laboratory.Infrastructure.csproj
|  ├── Migrations
|  ├── LaboratoryContext.cs
|  └── Repositories
...