Are*_*rek 11 c# sql-server asp.net-mvc entity-framework
我的表Sections
(SQL Server)具有ID
主键(int, identity)
和SortIndex
列(int)用于排序目的.
数据库有一个触发器,可以设置SortIndex := ID
每个触发器INSERT
.显然,我想稍后通过交换两行的值来更改排序索引.
我使用Entity Framework访问数据,所有这些都使用MVC3 Web应用程序.
问题是,SortIndex
在我将新对象插入表中后,Entity Framework不会更新值.它还会缓存所有数据,因此以下调用从此表中获取所有对象也会SortIndex
为此对象提供错误的值.
我尝试改变StoreGeneratedPattern
这个专栏EDMX
.这似乎是伟大而优雅的,但并没有解决问题.
如果我设置为Identity
,它会导致EF正确更新该值,但它变为只读(尝试更改时抛出异常).将其设置Computed
为类似,但不是抛出异常,而是不将值写入DB.
如果我需要在插入对象后使用它,我可以每次重新创建EF对象,只需执行以下操作:
DatabaseEntities db = new DatabaseEntities()
Run Code Online (Sandbox Code Playgroud)
但对我来说这似乎是一种丑陋的解决方法.
这个问题的解决方案是什么?
显然是一些东西,不需要我在每次之后做一些动作insert
(并且冒着被遗忘和不被注意的风险)是首选.
Lad*_*nka 15
简而言之StoreGeneratedPattern
:该值由商店处理,您的应用程序永远不会修改它.在这种情况下,您将在致电后自动获得商店生成的价值SaveChanges
.
如果您不使用StoreGeneratedPattern
,则无法获得价值,您必须强制执行另一个查询以刷新您的实体.你可以这样做:
objectContext.Refresh(RefreshMode.StoreWins, yourSection);
Run Code Online (Sandbox Code Playgroud)
通常,您需要通过触发器和应用程序更新数据库中的值的情况与EF(以及可能还有其他ORM工具)不能很好地协同工作.
归档时间: |
|
查看次数: |
14900 次 |
最近记录: |