只读 table/entity EF Core 3.0
Readonly table/entity EF Core 3.0
是否可以在 EF Core 3.0 中制作 table/entity?基本上我有历史表,我想限制 insert/update/delete 命令。
我已经通过更改尝试了 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();
我也想避免这种情况。
我通过强制将此类表生成为视图来解决此要求。
例如:
modelBuilder.Entity<SampleHistory>(eb =>
{
eb.HasNoKey();
eb.ToView("Sample_History");
.
.
.
});
如果您尝试对此类表执行插入、更新或删除操作,EF 会抛出无效操作异常。
是否可以在 EF Core 3.0 中制作 table/entity?基本上我有历史表,我想限制 insert/update/delete 命令。
我已经通过更改尝试了 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();
我也想避免这种情况。
我通过强制将此类表生成为视图来解决此要求。
例如:
modelBuilder.Entity<SampleHistory>(eb =>
{
eb.HasNoKey();
eb.ToView("Sample_History");
.
.
.
});
如果您尝试对此类表执行插入、更新或删除操作,EF 会抛出无效操作异常。