Entity Framework Core 2.1: не удалось найти указанное поле «Модель» для свойства «Модель» в типе сущности «BarCodeDevice» - PullRequest
0 голосов
/ 25 ноября 2018

Мне нужно использовать подход Code First для создания базы данных с помощью Entity Framework Core 2.1, но я получаю эту ошибку:

The specified field 'Model' could not be found for property 'Model' on entity type 'BarCodeDevice'.

Вот классы, которые я использовал для этого

public class BarCodeDevice
    {
        public int SerialNumber { get; set; }
        public string Model { get; set; }
        public virtual ICollection<ClientBarCodeDevice> ClientBarCodeDeviceList { get; set; }
    }

И класс конфигурации

public class BarCodeDeviceConfiguration : IEntityTypeConfiguration<BarCodeDevice>
    {
        public void Configure(EntityTypeBuilder<BarCodeDevice> builder)
        {
            builder.HasKey(x => x.SerialNumber);
            builder.Property(t => t.Model)
              .IsRequired()
              .HasField("Model");
        }
    }

И Класс DbContext

public class SegregationDbContext : DbContext, IDisposable
    {
        public SegregationDbContext(DbContextOptions<SegregationDbContext> options) : base(options)
        { }


        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {                        
            modelBuilder.ApplyConfiguration(new BarCodeDeviceConfiguration());            
        }

        public DbSet<BarCodeDevice> BarCodeDevices { get; set; }
    }

И, наконец, конфигурация

public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<SegregationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Default")));
            services.AddMvc();
        }

1 Ответ

0 голосов
/ 25 ноября 2018

Проблема в том, что эта беглая строка конфигурации:

.HasField("Model")

HasField используется для указания вспомогательного поля для настраиваемого свойства, когда имя вспомогательного поля не соответствуетк соглашениям .

Но ваше свойство Model является автоматическим свойством, и нет вспомогательного поля с именем Model, следовательно, исключение.

Так что либо удалите эту строку, например

builder.Property(t => t.Model)
    .IsRequired();

, либо, если вы хотите принудительно использовать поле поддержки с неизвестным именем (как в случае с автоматическими свойствами), используйте метод UsePropertyAccessModeвместо этого, например,

builder.Property(t => t.Model)
    .IsRequired()
    .UsePropertyAccessMode(PropertyAccessMode.Field);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...