gpt4 book ai didi

c# - Entity Framework 不更新由触发器修改的值

转载 作者:可可西里 更新时间:2023-11-01 08:39:50 26 4
gpt4 key购买 nike

我的表 Sections (SQL Server) 有 ID 作为主键 (int, identity)SortIndex column (int) 用于排序目的。

数据库有一个触发器,它在每个 INSERT 处设置 SortIndex := ID。显然我想稍后通过交换两行的值来更改排序索引。

我使用 Entity Framework 访问数据,所有这些都使用 MVC3 网络应用程序。

问题是,在我向表中插入一个新对象后, Entity Framework 不会更新 SortIndex 的值。它还缓存了所有数据,因此以下从该表中获取所有对象的调用也将为该对象提供错误的 SortIndex 值。

我尝试更改 EDMX 中此列的 StoreGeneratedPattern。这看起来很棒很优雅,但并没有解决问题。

如果我设置为 Identity,它会导致 EF 正确更新该值,但它变为只读(尝试更改时抛出异常)。将其设置为 Computed 是类似的,但不是抛出异常,而是只是不将值写入数据库。

如果我需要在插入对象后使用它,我可以每次重新创建 EF 对象,只需执行以下操作:

DatabaseEntities db = new DatabaseEntities()

但这对我来说似乎是丑陋的解决方法。

这个问题的解决方案是什么?

显然,不需要我在每次 insert 之后执行某些操作(并冒着被遗忘和不被注意的风险)的东西是首选。

最佳答案

简而言之,StoreGeneratedPattern 的意思是:值由存储处理,您的应用程序永远不会修改它。在这种情况下,您将在调用 SaveChanges 后自动获取存储生成的值。

如果您不使用 StoreGeneratedPattern,您将得不到值(value),您将不得不强制执行另一次查询以刷新您的实体。例如,您可以这样做:

objectContext.Refresh(RefreshMode.StoreWins, yourSection);

通常情况下,您需要通过触发器和应用程序更新数据库中的值时,EF(可能还有其他 ORM 工具)不能很好地发挥作用。

关于c# - Entity Framework 不更新由触发器修改的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9615776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com