Czy można wykonać stół / podmiot w EF Core 3.0? Zasadniczo mam stoły historyczne, na których chcę, aby rtrekt / aktualizacji / usuwania poleceń.

Próbowałem już asnotracking, zmieniając:

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

Do:

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

Działa dobrze, jeśli zrobię coś takiego (nic nie zostanie zapisane w DB):

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

Ale jeśli dodam oświadczenie o aktualizacji przed zapisaniem, widzę rekordową aktualizację w DB:

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

Chcę tego uniknąć.

5
SKS 4 sierpień 2020, 13:23

1 odpowiedź

Najlepsza odpowiedź

Rozwiązałem ten wymóg, egzekwując takie tabele, aby uzyskać oglądane jako widoki.

Dawny:

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

EF zgłasza InvalidOpreatationException, jeśli spróbujesz wykonać wstawkę, aktualizację lub usunąć operację na takich tabelach.

1
SKS 25 sierpień 2020, 09:46