我试图补充这个Tutorial。内容只是简单地将对象映射到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-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; }
}
映射看起来很容易,我不明白我做错了什么。
答案 0 :(得分:0)
让你的代码看起来不错。正如我所看到的那样,DomainManager可能有问题,但无法判断你是否发布它或者EntityFramework存在一些问题(对我来说很常见)。
您最好向我们提供Stack中的Error异常。
上次检查数据库架构时,它必须与包含EntityData属性的模型完全相同,或者如果您使用Code-First设置初始化程序。使用ClearSchemaIfModelChanges初始化程序。也许自你的种子后有一些变化。
答案 1 :(得分:0)
我发现我的MissingMethodException
中有一个DomainManager
。我覆盖了我Query()
的{{1}}并最终找到了它。看起来我在nugetpackages /版本控制方面遇到了一些问题。