2015-02-10 149 views
1

对于使用ASP.NET Web API和OData针对实体框架数据库,一次更新多个记录的最佳方法是什么?我们假设我们的数据库中有一个带有“State”字段的表,并且我们想要做一些类似于这条SQL语句的操作:“UPDATE Table set State = 1”。我应该使用GET和PUT为每条记录做一个循环吗?我根本不喜欢它,我想这应该是一个更好的方法来实现这一点。Webapi更新多个记录

谢谢

+0

好像少一个ASP.NET的WebAPI的问题,更多的东西与您的数据提供者。你在使用什么数据提供者?实体框架? – 2015-02-10 23:01:04

+0

是的,实体框架。但我并不是指更新的内部开发,但是如果有一种方法可以避免GET和PUT的循环。谢谢 – 2015-02-10 23:09:57

+0

也许我没有解释清楚,对不起。我的意思是,因为我们有一个GetAll方法,我们可以过滤它(使用OData)来指定我们想要的记录,如果有方法来过滤我们想要更新的记录。 – 2015-02-10 23:14:16

回答

1

它看起来就像你不能在OData的做到这一点本身,但有一个办法,肯定会工作;只需使用本机Web API操作即可执行更新。

E.g.

[HttpPut] 
[Route("resources/state")] 
public IHttpActionResult UpdateState(int newState) 
{ 
    db.Database.SqlCommand("UPDATE Table SET State = @p0", newState); 
} 

你会从客户端使用PUT /resources/state?newState=1来调用它。

这可能是更清晰,使newState枚举:

public enum State 
{ 
    New = 0, 
    Processed = 1, 
    Error = 2, 
    etc. 
} 

[HttpPut] 
[Route("resources/state")] 
public IHttpActionResult UpdateState(State newState) 
{ 
    db.Database.SqlCommand("UPDATE Table SET State = @p0", (int)newState); 
} 

然后您的通话变得PUT /resources/state?newState=Processed这是一个更清晰一点。

+0

这是我正在寻找的操作系统,这是一个很好的方法。谢谢你,很好的回答 – 2015-02-12 13:41:22