c#-4.0 - 如何将多个对象插入到Azure移动服务表 Controller [.Net后端]

标签 c#-4.0 azure azure-mobile-services

我有一个用 .net Web API 编码的 Azure 移动服务。我有一个表 Controller 。我希望该表 Controller 能够使用 InsertAsync(myPerson) 从客户端插入多个人,而不仅仅是一个人。我在 TableController 中有以下代码:

[RequiresAuthorization(AuthorizationLevel.Admin)]        
public async Task<bool> InsertPersons(List<Person> values)
  {
     try
      {
        foreach (var item in values)
         {                   
                var current = await InsertAsync(item);
         }
         return true;
      }
      catch (System.Exception)
       {
            return false;
       }
  }

问题出在客户端。因为它是强类型的,所以一次只允许我插入一项。我该如何从客户端调用服务器?我是否必须编写自定义 Api Controller 并使用 mobileService.InvokeApiAsync 调用它?如果是这样,我如何从不继承自 TableController 的自定义 API Controller 访问我的数据库?

非常感谢!

最佳答案

TableController<T> 中的辅助方法基类假设插入操作适用于单个对象 - 并且客户端中的 InsertAsync 方法也假设相同。因此,即使您可以在表 Controller 中定义一个接受 Person 数组(或列表)的方法,您也无法通过客户端 SDK 调用它(至少在没有使用处理程序的情况下无法调用它,例如示例)。

但是,您可以创建一个采用此类列表的自定义 API。要从 API 插入多个项目,您可以直接访问上下文,而无需通过表中的辅助方法:

public class PersonController : ApiController
{
    test20140807Context context;

    protected override void Initialize(HttpControllerContext controllerContext)
    {
        base.Initialize(controllerContext);
        this.context = new test20140807Context();
    }

    [HttpPost]
    public async Task<bool> InsertPersons(List<Person> values)
    {
        foreach (var value in values)
        {
            if (string.IsNullOrEmpty(value.Id))
            {
                value.Id = Guid.NewGuid().ToString();
            }
        }

        try
        {
            this.context.People.AddRange(values);
            await this.context.SaveChangesAsync();

            return true;
        }
        catch (System.Exception ex)
        {
            Trace.WriteLine("Error: " + ex);
            return false;
        }
    }
}

在客户端:

private async void btnTest_Click(object sender, RoutedEventArgs e)
{
    var items = new Person[]
    {
        new Person { Name = "John Doe", Age = 33 },
        new Person { Name = "Jane Roe", Age = 32 }
    };
    try
    {
        var response = await App.MobileService.InvokeApiAsync<Person[], bool>("person", items);
        Debug.WriteLine("response: " + response);
    }
    catch (Exception ex)
    {
        var str = ex.ToString();
        Debug.WriteLine(str);
    }
}

关于c#-4.0 - 如何将多个对象插入到Azure移动服务表 Controller [.Net后端],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25596926/

相关文章:

c# - 回复 bot-authentication-msgraph 代码中的地址配置问题

asp.net - URL 解码在 Azure Web 应用程序上不起作用

java - Azure 移动服务异步任务

azure - 如何配置 Azure 移动服务以填充自定义仪表板

azure - Azure Easy Tables 上的内部授权

c# - 最小起订量、SetupGet、模拟属性

c# - 如何阻止引发 datagridview 中的双击事件?

azure - 导出为 PFX 时 Azure 应用服务证书的密码是什么?可以改变吗?

c# - 在字典内部的字典中添加键值对

.net - 在Wpf应用中查看Byte [] Pdf