0

我正在尝试将视图添加为实体的导航属性。

 public class Schedule
    {
        public int Id { get; set; }
        public decimal ScheduledQuantity { get; set; }
        public ScheduleDetails ScheduleDetails { get; set; }
    }
 public class ScheduleDetails
    {
        public int ScheduleId { get; set; }
        public decimal BadQuantity { get; set; }
        public Schedule Schedule { get; set; }
    }

带映射:

    public class ScheduleDetailMap : IEntityTypeConfiguration<ScheduleDetails>
    {
        public void Configure(EntityTypeBuilder<ScheduleDetails> builder)
        {
            builder.ToView("vwScheduleDetails", "ShopOrders");
            builder.HasKey(t => t.ScheduleId);
            builder.HasOne(p => p.Schedule).WithOne(s => s.ScheduleDetails);

        }
    }

    public class ScheduleMap : IEntityTypeConfiguration<Schedule>
    {
        public void Configure(EntityTypeBuilder<Schedule> builder)
        {
            builder.ToTable("Schedules");
            builder.HasKey(t => t.Id);
            builder.Property(t => t.Id).UseIdentityColumn();
        }
    }

当我查询它工作正常。但是,如果我添加一个新的计划记录。

     var schedule = new Schedule
            {
                ScheduledQuantity = 100,
                ScheduleDetails = new ScheduleDetails()
            };
            context.Schedules.Add(schedule);

            context.SaveChanges();

我收到一个异常说“实体类型'ScheduleDetails'未映射到表,因此实体无法持久保存到数据库。使用'OnModelCreating'中的'ToTable'来映射它。”

无论如何让EF忽略保存这个“实体”?

4

1 回答 1

0

这是一个老问题,但对于任何有类似问题的人来说——在我看来,问题在于导航属性。我在视图的类中有一些剩余的属性,因为它的代码是从其他实体复制的。通过删除这些属性,错误就消失了。

如果您想在代码中使用导航属性,这并没有真正的帮助,但它可能会帮助某人继续他们的搜索。

于 2021-07-20T11:18:27.677 回答