只读表/实体 EF Core 3.0

Sum*_*ngh 5 entity-framework-core ef-core-3.0

是否可以在 EF Core 3.0 中创建表/实体?基本上我有我想限制插入/更新/删除命令的历史记录表。

我已经通过更改尝试了 AsNoTracking:

public DbSet<SampleHistory> SampleHistories { get; set; }
Run Code Online (Sandbox Code Playgroud)

到:

public IQueryable<SampleHistory> SampleHistories { get {return Set<SampleHistory>).AsNoTracking<SampleHistory>(); } }
Run Code Online (Sandbox Code Playgroud)

如果我做这样的事情它工作正常(没有保存在数据库中):

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

但是如果我在保存之前添加更新语句,我会看到记录在数据库中更新:

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

我也想避免这种情况。

Sum*_*ngh 2

我通过强制将此类表生成为视图来解决此要求。

前任:

modelBuilder.Entity<SampleHistory>(eb =>
        {
            eb.HasNoKey();
            eb.ToView("Sample_History");
        .
        .
        .
        });
Run Code Online (Sandbox Code Playgroud)

如果您尝试对此类表执行插入、更新或删除操作,EF 会抛出无效操作异常。