我们正在使用v4实体框架作为新版本应用程序的一部分,其中包括一些重要的会计功能(支付处理,现金平衡,错误的支票处理等)。在我们之前的所有应用程序中,我们已经建立了一个政策(我被告知在银行/会计级应用程序中极为常见)至少有一个表,包含所有资金的传入“审计跟踪”,只能用新数据写入。
换句话说,进入系统的新信息将触发新实体的创建,该实体将通过我们所拥有的任何数据层对象的“插入”操作,并将新行写入基础表。有意使用 no 更新或删除这些实体的操作来实现数据层;任何更改都被跟踪为新插入的调整行。
使用EF,我们正在寻找实现相同目标的方法,但在这种情况下,我们显然需要阻止 EF允许更新(而不是仅仅编写函数) )。有没有办法将EF模型中的实体指定为“仅插入”?
正如我在标题中提到的:我知道这可以通过将存储过程映射到Insert操作而不是Update操作来完成。我们正在寻找其他选择,如果存在,有两个原因:
答案 0 :(得分:0)
你最好的选择是将.AsNoTracking添加到模型中每个DbSet的getter中。这意味着EF不会跟踪从数据库中获得的任何实体(因此不会对它们执行任何回写)。它还有提高性能的额外好处。
通过强制读取所有读取,您将消除EF中的更新路径。