只读表/实体 EF Core 3.0

5

在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个回答

2
我通过将这些表生成为视图来解决了这个需求。
例如:
modelBuilder.Entity<SampleHistory>(eb =>
        {
            eb.HasNoKey();
            eb.ToView("Sample_History");
        .
        .
        .
        });

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接