Azure移动应用程序 - 使用外键POST到表格"错误请求" 400错误

时间:2016-05-04 16:48:41

标签: entity-framework azure xamarin.ios azure-mobile-services

我希望这是一个简单的问题。我已经基于示例ToDo项目创建了一个Azure Mobile Apps项目,添加了我自己的表/数据对象。我遇到的问题是将记录添加/ POST到与另一个具有外键关系的表中。以下是我的Employee表数据对象:

public class Employee : EntityData
{
    public string Name { get; set; }
    public string EmailAddress { get; set; }
    public bool IsActive { get; set; }

    public string EmployeeTypeId { get; set; }
    public virtual EmployeeType EmployeeType { get; set; }
}

...这是我的EmployeeType数据对象:

public class EmployeeType : EntityData
{
    public string EmpType { get; set; }
    public bool IsActive { get; set; }
}

我认为,当使用EF Code First在数据库中创建表时,Employee类中的虚拟EmployeeType属性是必要的,以创建与EmployeeType表的关系。 (至少,这是我理解的,并且它有效)我可以使用InsertAsync方法将我的Xamarin客户端应用程序中的记录插入到EmployeeType表中,但是我收到了一个"错误请求"尝试插入Employee表时出现400错误。

我已经找了很多解决方案,但一切都是指Azure移动服务,而不是应用。如果需要,我可以用我的客户端模型类更新这个问题(我现在在我的电脑上,并且无法访问我的Mac上的Xamarin Studio项目)。作为参考,这些类与数据对象几乎相同 - 只是每个属性都使用JsonProperty属性进行修饰,但服务中概述的虚拟属性除外。为了完整起见,我尝试将该属性添加到客户端对象中,但它仍然抛出了"错误请求" 400错误。

感谢您为我提供的任何指示。

2 个答案:

答案 0 :(得分:0)

最有可能的是,在尝试映射外键时会出现问题。您是否为员工类型指定了所有字段?我建议您执行以下操作:

  1. 使用Fiddler或将委派处理程序附加到客户端,以查看传出请求的外观。使用JSON正文更新您的评论。请参阅https://github.com/Azure/azure-mobile-apps/wiki/Help,-my-app-isn't-working!#log-outgoing-requests-in-managed-client-xamarin-windows。

  2. 将调试器附加到服务器项目。您可以在本地运行时或在将解决方案部署到Azure后执行此操作,但如果在本地运行,则可以获得更好的性能。见https://github.com/Azure/azure-mobile-apps/wiki/Help,-my-app-isn't-working!#remote-debugging-net-server-sdk。

  3. 我怀疑问题是,在您的反序列化对象中,EmployeeType最终为null,然后Entity Framework拒绝DB插入。

答案 1 :(得分:0)

你能从错误的请求中获得更多信息吗?尝试将其添加到表控制器

        protected override void Initialize(HttpControllerContext controllerContext)
    {
        controllerContext.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    }