Entity framework 4 实体框架4:是否有方法将实体标记为“仅插入”(不使用存储过程)

Entity framework 4 实体框架4:是否有方法将实体标记为“仅插入”(不使用存储过程),entity-framework-4,Entity Framework 4,我们正在使用v4实体框架作为新版本应用程序的一部分,该应用程序包括一些重要的会计功能付款处理、现金平衡、坏账处理等。在我们以前的所有应用程序中,我们制定了一项政策,据我所知,这在银行/会计级别的应用程序中非常常见,即至少有一个表包含所有资金的传入审计跟踪,只能使用新数据写入 换言之,进入系统的新信息将触发新实体的创建,该实体将通过我们拥有的任何数据层对象的插入操作,并将新行写入基础表。数据层是故意实现的,没有对这些实体进行更新或删除操作;任何更改都作为新插入的调整行进行跟踪 对于EF,我们正在寻

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

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

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

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

我们还没有任何存储过程,如果可以避免的话,我们希望避免在部署/升级过程中添加其他元素。 此解决方案依赖于没有存储过程来指示表是特殊的。我更喜欢一种依赖于明确断言的解决方案,即插入只是故意这样做的。
是的,您最好的选择是为模型中的每个DbSet添加.AsNoTracking。这意味着EF不会跟踪您从数据库获得的任何实体,因此不会对它们执行任何写回。它还有一个额外的好处,就是提高了性能

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


看一看

这看起来很有希望;您是否碰巧知道自跟踪实体是否支持这一点?我要到晚上才能检查tomorrow@MichaelEdenfield我不知道关于自跟踪实体的大量信息,但似乎自跟踪和只读的概念有点相互排斥,因为每个实体都知道如何从本质上写回自己。也许您最好使用一个接口来定义实体,并为跟踪实体和查询实体提供不同的具体实现。