EFCore 2 Fluent API для создания собственного правила отображения - PullRequest
0 голосов
/ 06 ноября 2019

У меня возникла ситуация, когда я пытаюсь построить модель предметной области, которая не точно совпадает с базой данных, и мне трудно понять, как создать правила сопоставления с помощью 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

...