База данных First EF Core и обратное свойство - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть база данных, в которой во многих таблицах есть набор строк данных аудита:

public Guid CreatedByUserId { get; set; }
public DateTime CreatedDate { get; set; }
public Guid? ModifiedByUserId { get; set; }
public DateTime? ModifiedDate { get; set; }

Например, таблицы Area и Citation обе имеют такой набор строк.UserIds связаны внешним ключом с таблицей User (как и следовало ожидать.)

Когда я запускаю генератор EF scaffolding (это первый проект БД), я запускаю это:

dotnet ef dbcontext scaffold "....connection..." Microsoft.EntityFrameworkCore.SqlServer -o "output" --data-annotations

Когда я смотрю на класс User, я получаю следующее:

public class User
{
    public User()
    {
        AreaCreatedByUser = new HashSet<Area>();
        AreaModifiedByUser = new HashSet<Area>();
        CitationCreatedByUser = new HashSet<Citation>();
        CitationModifiedByUser = new HashSet<Citation>();
    }

    public Guid Id { get; set; }
    [Required]
    [StringLength(50)]
    public string Name { get; set; }
    public Guid CreatedByUserId { get; set; }
    public DateTime CreatedDate { get; set; }
    public Guid? ModifiedByUserId { get; set; }
    public DateTime? ModifiedDate { get; set; }

    public virtual ICollection<Area> AreaCreatedByUser { get; set; }
    [InverseProperty("ModifiedByUser")]
    public virtual ICollection<Area> AreaModifiedByUser { get; set; }
    [InverseProperty("CreatedByUser")]
    public virtual ICollection<Citation> CitationCreatedByUser { get; set; }
    [InverseProperty("ModifiedByUser")]
    public virtual ICollection<Citation> CitationModifiedByUser { get; set; }
}

(На самом деле он используется в сотнях таблиц, но я сократил вышеприведенное, чтобы сделать его немного понятнее.)

Я действительно не хочу переходить от пользователя ко всем записям, которые используют пользователя в этих строках аудита, но я не знаю, что я могу сделать, чтобы исключить это или предотвратить его создание.Когда я получаю пользователя из базы данных, мне не нужны все эти дополнительные поля, даже если они пусты без включения.Я полагаю, если я откажусь от отношений с ФК, которые могли бы это сделать, но это вовсе не кажется хорошей идеей.

Есть предложения?

1 Ответ

0 голосов
/ 14 февраля 2019

В настоящее время решение состоит в том, чтобы настроить сгенерированный код после скаффолдинга.См. Настройка модели .

. Вы всегда можете создать свои собственные модели или попробовать сторонний компонент, такой как EntityFrameworkCore.Scaffolding.Handlebars

Обратите внимание, что в модели, созданной вручную или по индивидуальному заказу, в EF Core есть действительно классная функция для обработки такого рода столбцов «инфраструктуры»: Свойства теней

...