Сначала я хотел использовать 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, IEnumerable
1, DiffContext diffContext, Func4 diff, Func
3 add, Func3 remove, Func
4 [] предикаты) + MoveNext ()
в System.Linq.Enumerableadd-migration init
numerableadd-migration init
ConcatIs, источники IEnumerableadd-migration init
ConcatI удалить, Func4[] predicates)+MoveNext()
1.MoveNext ()
at System.Linq.Enumerable.ConcatIterator
в Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer.Sort (IEnumerable1 operations, DiffContext diffContext)
1.b__0 ()
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
в 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);
На стороне базы данных история миграции пуста.
Я был бы очень признателен, если бы кто-нибудь мог объяснить мне, почему возникает это исключение.