实体框架 4:有没有办法将实体标记为"insert-only"(不使用存储过程)



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

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

对于 EF,我们

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

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

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

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

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

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

相关内容

最新更新