#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, потому что его код был скопирован из другого объекта. При удалении этих свойств ошибка исчезла.
Это не очень помогает, если вы хотите использовать свойства навигации в своем коде, но это может помочь кому-то продолжить поиск.