首页 > 解决方案 > Entity Framework Core 2.1:在实体类型“BarCodeDevice”上找不到属性“模型”的指定字段“模型”

问题描述

我需要使用 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();
        }

标签: c#-4.0entity-framework-core

解决方案


问题是这个流畅的配置行:

.HasField("Model")

HasField当支持字段名称不符合约定时,用于指定正在配置的属性的支持字段。

但是您Model的属性是自动属性,并且没有称为的支持字段Model,因此是例外。

所以要么删除那条线,例如

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

或者如果您想强制使用名称未知的支持字段(自动属性就是这种情况),请改用UsePropertyAccessMode方法,例如

builder.Property(t => t.Model)
    .IsRequired()
    .UsePropertyAccessMode(PropertyAccessMode.Field);

推荐阅读