对多个表使用相同的类作为控制器
本文关键字:控制器 | 更新日期: 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);
}
}
}
我将试着点题回答你们的问题:
-
是,否。您要做的是遵循存储库模式。所以,是的,您可以创建一个BaseRepository,它将使用泛型数据类型完成大部分工作。不,您仍将拥有继承基类但指定泛型数据类型的类。
-
TableController是一个专门用于数据表的ApiController。它是通过路由配置调用的,该配置会转换URL "/tables/TodoItem/Id"
-
同样,TableController是一个ApiController。不确定它是否有帮助,但是有很多Azure移动服务的"存储库模式"的例子。你可以看看这里得到一个想法:http://www.codeproject.com/Articles/574357/Repository-Pattern-with-Windows-Azure-Mobile-Servi