实体框架4:有没有办法将实体标记为“仅插入”(不使用存储过程)

时间:2012-04-30 19:46:02

标签: entity-framework-4

我们正在使用v4实体框架作为新版本应用程序的一部分,其中包括一些重要的会计功能(支付处理,现金平衡,错误的支票处理等)。在我们之前的所有应用程序中,我们已经建立了一个政策(我被告知在银行/会计级应用程序中极为常见)至少有一个表,包含所有资金的传入“审计跟踪”,只能用新数据写入。

换句话说,进入系统的新信息将触发新实体的创建,该实体将通过我们所拥有的任何数据层对象的“插入”操作,并将新行写入基础表。有意使用 no 更新或删除这些实体的操作来实现数据层;任何更改都被跟踪为新插入的调整行。

使用EF,我们正在寻找实现相同目标的方法,但在这种情况下,我们显然需要阻止 EF允许更新(而不是仅仅编写函数) )。有没有办法将EF模型中的实体指定为“仅插入”?

正如我在标题中提到的:我知道这可以通过将存储过程映射到Insert操作而不是Update操作来完成。我们正在寻找其他选择,如果存在,有两个原因:

  1. 我们还没有任何存储过程,如果可以避免,我们希望避免在部署/升级过程中添加其他元素。
  2. 此解决方案依赖于存储过程的“缺席”来指示该表是特殊的。我更喜欢一种依赖于明确断言的解决方案,即“仅插入”是故意的。

1 个答案:

答案 0 :(得分:0)

你最好的选择是将.AsNoTracking添加到模型中每个DbSet的getter中。这意味着EF不会跟踪从数据库中获得的任何实体(因此不会对它们执行任何回写)。它还有提高性能的额外好处。

通过强制读取所有读取,您将消除EF中的更新路径。

看看at my post on AsNoTrackingthis article on the EF site