Отображение представления SQL в EF Core 5 — SaveChanges

#ef-core-5.0

#ef-core-5.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’ не сопоставлен с таблицей, поэтому объекты не могут быть сохранены в базе данных. Используйте «ToTable» в «OnModelCreating», чтобы отобразить его «.

Есть ли способ заставить EF игнорировать сохранение этого «объекта»?

Ответ №1:

Это довольно старый вопрос, но для тех, у кого есть подобные проблемы — в моем случае проблема заключалась в свойствах навигации, на мой взгляд. У меня были некоторые оставшиеся свойства в классе view, потому что его код был скопирован из другого объекта. При удалении этих свойств ошибка исчезла.

Это не очень помогает, если вы хотите использовать свойства навигации в своем коде, но это может помочь кому-то продолжить поиск.