Я пытаюсь настроить два объекта, показанных ниже, с EF Core:
Пользователь:
public class User
{
public int UserId { get; set; }
public string Title { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
[Required]
public string Email { get; set; }
[NotMapped]
public string FriendlyIdentifier
{
get
{
var name = $"{Name} {Surname}";
if (!string.IsNullOrWhiteSpace(name))
return name;
else if (!string.IsNullOrWhiteSpace(Email))
return Email;
else
return UserId.ToString();
}
}
public ICollection<Booking> Bookings { get; set; }
}
UserDetails:
public class UserDetails : User
{
public DateTime? LatestBookingDate { get; set; }
}
Причина этого заключается в том, что я хочу, чтобы пользователи могли получать данные с их последней датой бронирования без необходимости извлекать все данные о бронировании, а затем вручную определять последнюю дату бронирования в коде.Чтобы добиться этого, я создал представление SQL, которое выбирает самую последнюю дату бронирования, и я хочу привязать UserDetails
к этому представлению.
У меня есть следующие настройки EF:
modelBuilder.Entity<User>(builder =>
{
builder.ToTable("userdetails");
builder.HasKey(x => x.UserId);
builder.HasIndex(x => new { x.Name, x.Surname, x.Email });
});
modelBuilder.Query<UserDetails>()
.ToView("view_userdetails");
Ноэто приводит к следующей ошибке при попытке выбрать сущность UserDetails
:
'Невозможно установить' User 'в качестве базового типа' UserDetails '.Иерархии наследования не могут содержать сочетание типов сущностей и типов запросов. '
Я знаю, что есть расширение HasDiscriminator
, как описано здесь: https://docs.microsoft.com/en-us/ef/core/modeling/relational/inheritance, но я не оченьесть дискриминатор, так как UserDetails
это просто расширение User
.
Есть ли какой-нибудь способ для меня, чтобы это работало?Я не хочу дублировать свойства User
в UserDetails
, потому что тогда есть две сущности, которые нужно поддерживать, когда что-то меняется.Я хотел бы сохранить наследство.