Таблица / сущность только для чтения EF Core 3.0 - PullRequest
5 голосов
/ 04 августа 2020

Возможно ли создание таблицы / объекта в EF Core 3.0? В основном у меня есть таблицы истории, в которых я хочу ограничить команды вставки / обновления / удаления.

Я уже пробовал AsNoTracking, изменив:

public DbSet<SampleHistory> SampleHistories { get; set; }

на:

public IQueryable<SampleHistory> SampleHistories { get {return Set<SampleHistory>).AsNoTracking<SampleHistory>(); } }

Он отлично работает, если я делаю что-то вроде этого (ничего не сохраняется в БД):

var v = DbContext.SampleHistories.FirstOrDefault(e => e.HistoryId == 1);
v.Field1 = $"Test{DateTime.Now.ToLongTimeString()}";
DbContext.SaveChanges();

, но если я добавлю статус обновления перед сохранением, я вижу, что запись обновляется в БД:

var v = DbContext.SampleHistories.FirstOrDefault(e => e.HistoryId == 1);
v.Field1 = $"Test{DateTime.Now.ToLongTimeString()}";
DbContext.Update(v);
DbContext.SaveChanges();

Я тоже хочу этого избежать.

1 Ответ

1 голос
/ 10 августа 2020

Я решил это требование, заставив такие таблицы генерироваться как представления.

Пример:

modelBuilder.Entity<SampleHistory>(eb =>
        {
            eb.HasNoKey();
            eb.ToView("Sample_History");
        .
        .
        .
        });

EF показывает исключение недопустимой операции, если вы пытаетесь выполнить Insert, Update или Delete работа с такими таблицами.

...