对多个表使用相同的类作为控制器

本文关键字:控制器 | 更新日期: 2023-09-27 18:09:30

我是asp.net和azure移动服务的新手。

有一些问题:

1)我已经使用TodoItemController从azure表存储查询数据(只使用下面给出的样例类)我如何修改它,使其作为所有表的泛型类,而不仅仅是一个表。例如:如果我有另一个表叫人除了Todo我希望它对两个表

使用相同的类

2)我建议的方法是一个糟糕的设计模式,如果是,为什么?

3)我也不明白这个类是如何被调用的。在某处看到……/表格/待办事项映射到这个类。如果是这样的话。映射在哪里完成?

4) ApiController将实现我的目的1吗?如果是这样一个例子,请

using System.Linq;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Controllers;
using System.Web.Http.OData;
using Microsoft.WindowsAzure.Mobile.Service;
using TempService.DataObjects;
using TempService.Models;
using System.Web.Http.OData.Query;
using System.Collections.Generic;
namespace TempService.Controllers
{
public class TodoItemController : TableController<TodoItem>
{
    protected override void Initialize(HttpControllerContext controllerContext)
    {
        base.Initialize(controllerContext);
        // Create a new Azure Storage domain manager using the stored 
        // connection string and the name of the table exposed by the controller.
        string connectionStringName = "StorageConnectionString";
        var tableName = controllerContext.ControllerDescriptor.ControllerName.ToLowerInvariant();
        DomainManager = new StorageDomainManager<TodoItem>(connectionStringName,
            tableName, Request, Services);
    }
    public Task<IEnumerable<TodoItem>> GetAllTodoItems(ODataQueryOptions options)
    {
        // Call QueryAsync, passing the supplied query options.
        return DomainManager.QueryAsync(options);
    }
    // GET tables/TodoItem/1777
    public SingleResult<TodoItem> GetTodoItem(string id)
    {
        return Lookup(id);
    }
    // PATCH tables/TodoItem/1456
    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/1234
    public Task DeleteTodoItem(string id)
    {
        return DeleteAsync(id);
    }
}

}

对多个表使用相同的类作为控制器

我将试着点题回答你们的问题:

  1. 是,否。您要做的是遵循存储库模式。所以,是的,您可以创建一个BaseRepository,它将使用泛型数据类型完成大部分工作。不,您仍将拥有继承基类但指定泛型数据类型的类。

  2. TableController是一个专门用于数据表的ApiController。它是通过路由配置调用的,该配置会转换URL "/tables/TodoItem/Id"

  3. 同样,TableController是一个ApiController。不确定它是否有帮助,但是有很多Azure移动服务的"存储库模式"的例子。你可以看看这里得到一个想法:http://www.codeproject.com/Articles/574357/Repository-Pattern-with-Windows-Azure-Mobile-Servi