У меня есть база данных, в которой во многих таблицах есть набор строк данных аудита:
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; }
}
(На самом деле он используется в сотнях таблиц, но я сократил вышеприведенное, чтобы сделать его немного понятнее.)
Я действительно не хочу переходить от пользователя ко всем записям, которые используют пользователя в этих строках аудита, но я не знаю, что я могу сделать, чтобы исключить это или предотвратить его создание.Когда я получаю пользователя из базы данных, мне не нужны все эти дополнительные поля, даже если они пусты без включения.Я полагаю, если я откажусь от отношений с ФК, которые могли бы это сделать, но это вовсе не кажется хорошей идеей.
Есть предложения?