Ответ
Да, работал. Shadow properties — это свойства, которые не определены в классе вашей модели, но существуют в модели EF Core и сопоставлены со столбцами базы данных.
Типичные сценарии использования:
- Аудит: Автоматическое отслеживание
CreatedDateиModifiedDate. - Мягкое удаление: Флаг
IsDeleted. - Внешние ключи (FK): Для отношений, где навигационное свойство есть, но явное свойство FK в классе не требуется.
Пример настройки и использования:
// В DbContext.OnModelCreating
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property<DateTime>("LastUpdated") // Определяем shadow property
.HasDefaultValueSql("GETUTCDATE()");
modelBuilder.Entity<Blog>()
.Property<bool>("IsDeleted");
}
// Как получить или установить значение shadow property
var blog = context.Blogs.First();
// Получаем значение
var lastUpdated = context.Entry(blog).Property<DateTime>("LastUpdated").CurrentValue;
// Устанавливаем значение
context.Entry(blog).Property<bool>("IsDeleted").CurrentValue = true;
Ключевые моменты:
- Доступ к ним осуществляется через
DbContext.Entry(entity).Property<T>("PropertyName"). - Они могут использоваться в запросах LINQ через статический метод
EF.Property. - Полезны для инфраструктурных данных, которые не должны быть частью публичного API доменной модели.