具有本地状态的Asp.net WebApi实体框架控制器

时间:2016-08-10 10:53:58

标签: c# asp.net entity-framework asp.net-web-api

我尝试使用angularjs创建SPA,允许在EF上下文中更改数据而不调用saveChanges()然后保存(调用saveChanges())或取消更改。

MyController.cs

public class MyController : ApiController
    {
        private Oralce_dbContainer _db = new Oralce_dbContainer();

        [Route("Items/{ParentId:int?}")]
        public async Task<IHttpActionResult> GetItems(int? ParentId)
        {

            var Parent = await _db.parents.FindAsync(ParentId);
            var items = Parent.Item.ToList();
            return Ok(items);
        }


        [HttpPost]
        [Route("Delete")]
        public async Task<IHttpActionResult> Delete(Item item)
        {                
            var i = await _db.Item.FirstOrDefaultAsync(x => x.id == item.id);
            _db.Item.Remove(i);
            return Ok(true);
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                _db.Dispose();
            }
            base.Dispose(disposing);
        }    
    }

我收到物品然后发布删除并再次获取物品我得到了所有带有删除物品的物品。如何保存EF上下文beetwen调用控制器操作?

1 个答案:

答案 0 :(得分:0)

Oralce_dbContainer的实时循环是按请求进行的,所以在调用Delete api和response _db对象后调出。您必须在同一请求中删除后调用SaveChange。

public async Task<IHttpActionResult> Delete(Item item)
{                
    var i = await _db.Item.FirstOrDefaultAsync(x => x.id == item.id);
    _db.Item.Remove(i);
    _db.SaveChanges();

    return Ok(true);
}