1

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

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

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

正如我在标题中提到的:我知道这可以通过将存储过程映射到插入操作而不是更新操作来完成。我们正在寻找其他选项(如果存在),原因有二:

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

1 回答 1

0

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

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

看看我在 AsNoTracking 上的帖子,以及EF 网站上的这篇文章

于 2012-04-30T20:04:11.357 回答