Azure Mobile Services AutoMapper HttpResponseException at Qu

本文关键字:at Qu HttpResponseException AutoMapper Mobile Services Azure | 更新日期: 2023-09-27 18:33:39

我试图完成本教程。内容只是简单的对象到DTO的映射。

我在WebConfig.cs初始化了我的映射器

 public static void Register()
    {
        // Use this class to set configuration options for your mobile service
        ConfigOptions options = new ConfigOptions();
        // Use this class to set WebAPI configuration options
        HttpConfiguration config = ServiceConfig.Initialize(new ConfigBuilder(options));
        AutoMapper.Mapper.Initialize(cfg =>
        {
            // Define a map from the database type TodoItem to 
            // client type TodoItemDto. Used when getting data.
            cfg.CreateMap<TodoItem, TodoItemDto>();
            // Define a map from the client type to the database
            // type. Used when inserting and updating data.
            cfg.CreateMap<TodoItemDto, TodoItem>();
        });
        // To display errors in the browser during development, uncomment the following
        // line. Comment it out again when you deploy your service for production use.
        // config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
        Database.SetInitializer(new my_Initializer());
    }

我添加了教程中所示的 DTO 类并准备了控制器

 public class TodoItemController : TableController<TodoItemDto>
{

    protected override void Initialize(HttpControllerContext controllerContext)
    {
        base.Initialize(controllerContext);
        my_Context context = new my_Context();
        DomainManager = new SimpleMappedEntityDomainManager(context, Request, Services);
    }
    public IQueryable<TodoItemDto> GetAllTodoItems()
    {
            return Query();
    }
    public SingleResult<TodoItemDto> GetTodoItem(string id)
    {
        return Lookup(id);
    }
    public Task<TodoItemDto> PatchTodoItem(string id, Delta<TodoItemDto> patch)
    {
        return UpdateAsync(id, patch);
    }
    public async Task<IHttpActionResult> PostTodoItem(TodoItemDto item)
    {
        TodoItemDto current = await InsertAsync(item);
        return CreatedAtRoute("Tables", new { id = current.Id }, current);
    }
    public Task DeleteTodoItem(string id)
    {
        return DeleteAsync(id);
    }
}

我一步一步地完成了本教程。我真的试图做同样的事情。但最后,当我打电话给GetAllTodoItems()时,我都会得到一个HttpResponseException.

编辑:当我在return Query()打电话给GetAllTodoItems()时,我得到了我的HttpResponseException

我可以在上下文中看到我的两个待办事项(我播种的)。所以我的上下文不是空的。我的DomainManager与教程中的相同。

我什至不映射不同的值。我的模型与本教程的第一章相似。

public class TodoItem : EntityData
{
    public string Text { get; set; }
    public bool Complete { get; set; }
}
public class TodoItemDto : Microsoft.WindowsAzure.Mobile.Service.EntityData
{
    public string Text { get; set; }
    public bool Complete { get; set; }
}

映射看起来很容易,我不明白我做错了什么。

Azure Mobile Services AutoMapper HttpResponseException at Qu

伙计,你的代码看起来不错。在我看来,也许域管理器有问题,但无法判断您是否不发布它或实体框架存在一些问题(对我来说很常见)。

您最好向我们提供堆栈中的错误异常。

最后检查数据库架构,它必须与模型(包括 EntityData 属性)完全相同,或者,如果转到代码优先,请设置初始值设定项权限。使用 ClearSchemaIfModelChanges 初始值设定项。也许自从你的种子以来有一些变化。

我发现我的DomainManager中得到了一个MissingMethodException。我覆盖了DomainManagerQuery(),终于找到了它。看起来我在 nuget包/版本控制方面遇到了一些问题。