2016-05-09 11 views
3

Azureアプリケーションサービスのモバイルバックエンドサービスでは、REST API要求はTableController実装によって処理されます。これらのメソッドは、クライアントSDKで使用可能な対応するメソッドを使用して呼び出すことができます。だから、私は特定のエンティティを照会し、クライアント側からステータスを更新することができます。Azure App Service - テーブルコントローラからのオブジェクトの更新

しかし、サーバー側または同じコントローラ内でそれらを呼び出す方法はありますか?例えば、私は特定のtodoItemを照会し、アイテム

  • 更新状況
  • 使用UpdateAsync(IDを取得するために

    1. 使用する検索(ID)のように、ここでいくつかのカスタムメソッドからそのステータスを更新する場合、item)

    ここでは、UpdateAsync(id、patch)メソッドを呼び出すためにTodoItemのDeltaオブジェクトを作成する方法がわかりません。

    public class TodoItemController : TableController<TodoItem> 
    { 
        protected override void Initialize(HttpControllerContext controllerContext) 
        { 
         base.Initialize(controllerContext); 
         initrackerserviceContext context = new initrackerserviceContext(); 
         DomainManager = new EntityDomainManager<TodoItem>(context, Request); 
        } 
    
        // GET tables/TodoItem 
        public IQueryable<TodoItem> GetAllTodoItems() 
        { 
         return Query(); 
        } 
    
        // GET tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959 
        public SingleResult<TodoItem> GetTodoItem(string id) 
        { 
         return Lookup(id); 
        } 
    
        // PATCH tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959 
        public Task<TodoItem> PatchTodoItem(string id, Delta<TodoItem> patch) 
        { 
         return UpdateAsync(id, patch); 
        } 
    
        // POST tables/TodoItem 
        public async Task<IHttpActionResult> PostTodoItem(TodoItem item) 
        { 
         TodoItem current = await InsertAsync(item); 
         return CreatedAtRoute("Tables", new { id = current.Id }, current); 
        } 
    
        // DELETE tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959 
        public Task DeleteTodoItem(string id) 
        { 
         return DeleteAsync(id); 
        } 
    } 
    
  • 答えて

    3

    標準のEntity Frameworkメカニズムを使用してください。

    var item = await context.TodoItems.Where(i => i.Id.Equals(myId)).FirstOrDefaultAsync<TodoItem>(); 
    if (item != null) { 
        item.Complete = true; 
        context.Entry(item).State = EntityState.Modified; 
        await context.SaveChangesAsync(); 
    } 
    

    マイEFコーディングが最大のアドホックではありませんが、あなたのアイデアを得る必要があります。たとえば、検索し、ステータスを持つレコードを更新するために、あなただけのコンテキストを使用することができます。ちょうどEntity Frameworkのことをしてください。

    +0

    ありがとうございます。私はこれを試してみます。 –

    +0

    私の答えで説明したようにTableController.ReplaceAsync()を使う方が良い – Artemious

    +0

    ReplaceAsync()メソッドは例外を正しく処理するので、EFコンテキストで直接作業することはお勧めしません。 – Artemious

    1

    すでにhere in the source code of EntityDomainManagerに実装されているTableController.ReplaceAsync()メソッドを使用する方が良いです。

    var item = Lookup(item.Id).Queryable.FirstOrDefault(); 
    if (item != null) 
    { 
        item.Complete = true; 
        item = await ReplaceAsync(item.Id, item); 
    } 
    

    ReplaceAsync()方法が正しく例外を処理するので、私はEFのコンテキストで直接作業をお勧めしません。

    関連する問題