Query()中的Azure移动服务AutoMapper HttpResponseException

时间:2014-12-09 15:28:14

标签: c# azure automapper azure-mobile-services

我试图补充这个Tutorial。内容只是简单地将对象映射到DTO

我在WebConfig.cs

初始化了我的Mapper
 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-Class,如教程中所示,并准备了我的控制器

 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);
    }
}

我一步一步地完成了教程。我真的试着做同样的事情。 但最后,当我致电HttpResponseException时,我总是得到GetAllTodoItems()

//编辑:我在HttpResponseException致电GetAllTodoItems()时收到return Query()

我可以在上下文中看到我的两个TodoItems(我播种)。所以我的上下文不是空的。 我的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; }
}

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

2 个答案:

答案 0 :(得分:0)

让你的代码看起来不错。正如我所看到的那样,DomainManager可能有问题,但无法判断你是否发布它或者EntityFramework存在一些问题(对我来说很常见)。

您最好向我们提供Stack中的Error异常。

上次检查数据库架构时,它必须与包含EntityData属性的模型完全相同,或者如果您使用Code-First设置初始化程序。使用ClearSchemaIfModelChanges初始化程序。也许自你的种子后有一些变化。

答案 1 :(得分:0)

我发现我的MissingMethodException中有一个DomainManager。我覆盖了我Query()的{​​{1}}并最终找到了它。看起来我在nugetpackages /版本控制方面遇到了一些问题。