У меня возникла ситуация, когда я пытаюсь построить модель предметной области, которая не точно совпадает с базой данных, и мне трудно понять, как создать правила сопоставления с помощью EFCore
Модель предметной области
public class Appointment
{
public string Title { get; set; }
public long UserId { get; set; }
public string UserFullName { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public void MyBusinessLogic(){}
}
Это уменьшенная версия, но суть в том, что я не хочу использовать полноценный объект User в качестве свойства в моей модели назначений, например:
public User User {get;set;} <== trying to avoid adding this to the class
Мне просто нужен UserId и некоторые второстепенные метаданные, такие как полное имя пользователя.
Я настроил конфигурацию для сопоставления EFCore, чтобы по-прежнему строить и сопоставлять объект FK, как виднониже
internal class AppointmentConfiguration : IEntityTypeConfiguration<Appointment>
{
public void Configure(EntityTypeBuilder<Appointment> builder)
{
builder.Property(x => x.Title)
.IsRequired(true)
.HasMaxLength(AppointmentConst.MaxTitleLength);
builder.Property(x => x.Description)
.IsRequired(true)
.HasMaxLength(AppointmentConst.MaxDescriptionLength);
builder.HasOne<User>()
.WithMany()
.HasForeignKey(x => x.UserId)
.OnDelete(DeleteBehavior.Restrict);
}
}
Итак, я хотел бы выяснить, возможно ли построить какое-то правило отображения для свойства UserFullName, чтобы считывать его данные из таблицы User путем объединения столбцов First и Last name,но никогда не следует писать в эту таблицу.
Почти как при использовании такого инструмента, как Automapper.
По сути, я просто хочу сказатьEFCore, когда я запрашиваю данные Назначения, получаю значение для UserFullName из таблицы User и объединяю значение из столбцов FirstName и LastName