【问题标题】:Readonly table/entity EF Core 3.0只读表/实体 EF Core 3.0
【发布时间】:2020-08-04 10:23:19
【问题描述】:

是否可以在 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();

我也想避免这种情况。

【问题讨论】:

    标签: entity-framework-core ef-core-3.0


    【解决方案1】:

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

    例如:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-17
      • 2022-11-30
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 2019-11-07
      相关资源
      最近更新 更多