Ошибка миграции надстройки EF Core 3 при сопоставлении с реляционным типом

Сначала я хотел использовать EF Core code-first для создания моей модели в базе данных PostgreSQL. Это не удалось, потому что я получил исключение:

Невозможно найти сопоставление с реляционным типом для свойства Webservice.Models.Db.Order.High с типом среды CLR bool.

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

Это мой старый модельный класс:

public class Order : IEquatable<Order>, ICloneable
{
        public long Id { get; set; }
        public long? DeviceId { get; set; }

        [Required]
        [DataType(DataType.Text)]
        public Device Device { get; set; }

        public long? OriginOrderId { get; set; }

        [Required]
        [DataType(DataType.Date)]
        public DateTime RoutineStart { get; set; }

        [Required]
        [EnumDataType(typeof(Routine))]
        public Routine Routine { get; set; }

        [Required]
        [DataType(DataType.Text)]
        public int Pin { get; set; }

        [Required]
        public bool High { get; set; }


        [Required]
        [DataType(DataType.Text)]
        public int TimeInMilliseconds { get; set; }
        public string Description { get; set; }

        [NotMapped]
        public bool Ready { get; set; }

        public OrderState State { get; set; } = OrderState.Idle;
}

Я начал с add-migration init, что привело к этому исключению:

Microsoft.EntityFrameworkCore.Infrastructure [10403]
Entity Framework Core 3.0.0 инициализировал 'ApplicationDbContext' с помощью поставщика 'Npgsql.EntityFrameworkCore.PostgreSQL' с параметрами: None System.InvalidOperationException: для свойства 'не найдено сопоставления с реляционным типом Webservice.Models.Db.Order.High 'с типом среды CLR' bool '.

в Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSourceExtensions.GetMapping (IRelationalTypeMappingSource typeMappingSource, свойство IProperty),
в Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiflextConnect, (IPropertext target) Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.DiffCollection [T] (цели IEnumerable1 sources, IEnumerable1, DiffContext diffContext, Func4 diff, Func3 add, Func3 remove, Func4 [] предикаты) + MoveNext ()
в System.Linq.Enumerableadd-migration initnumerableadd-migration initConcatIs, источники IEnumerableadd-migration initConcatI удалить, Func4[] predicates)+MoveNext()
at System.Linq.Enumerable.ConcatIterator
1.MoveNext ()
в Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Sort (IEnumerable1 operations, DiffContext diffContext)
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.GetDifferences(IModel source, IModel target)
at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.ScaffoldMigration(String migrationName, String rootNamespace, String subNamespace, String language)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_0.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0
1.b__0 ()
в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute (действие действие)
Невозможно найти сопоставление с реляционным типом для свойства Webservice.Models.Db.Order.High с типом среды CLR bool.

Затем я обновил свою модель:

public enum PinState
{
    Low,
    High
}

public class Order : IEquatable<Order>, ICloneable
{
        public long Id { get; set; }
        public long? DeviceId { get; set; }

        [Required]
        [DataType(DataType.Text)]
        public Device Device { get; set; }

        public long? OriginOrderId { get; set; }

        [Required]
        [DataType(DataType.Date)]
        public DateTime RoutineStart { get; set; }

        [Required]
        [EnumDataType(typeof(Routine))]
        public Routine Routine { get; set; }

        [Required]
        [DataType(DataType.Text)]
        public int Pin { get; set; }

        [Required]
        public PinState PinState { get; set; }

        [Required]
        [DataType(DataType.Text)]
        public int TimeInMilliseconds { get; set; }
        public string Description { get; set; }

        [NotMapped]
        public bool Ready { get; set; }

        public OrderState State { get; set; } = OrderState.Idle;
}

Затем я попробовал add-migration inittest, что привело к тому же исключению.

Мой контекст работает как сервис с ограниченной областью видимости:

services.AddDbContext<ApplicationDbContext>(options =>
                  options.UseNpgsql(Configuration.GetConnectionString("postgres")), ServiceLifetime.Scoped);

На стороне базы данных история миграции пуста.

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


person Michael Santos    schedule 23.11.2019    source источник


Ответы (1)


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

Итак, решением для меня было полностью удалить все миграции и воссоздать их все для PostgreSQL.

person osynavets    schedule 27.11.2019