我希望这是一个简单的问题。我根据示例 ToDo 项目创建了一个 Azure 移动应用项目,添加了我自己的表/数据对象。我遇到的问题是将记录添加/发布到与另一个表具有外键关系的表中。以下是我的 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 在数据库中创建表时,为了创建与 EmployeeType 表的关系,Employee 类中的虚拟 EmployeeType 属性是必要的。 (至少,这就是我的理解,并且它有效)我可以使用 InsertAsync 方法将 Xamarin 客户端应用程序中的记录插入到 EmployeeType 表中,但在尝试插入 Employee 时收到“错误请求”400 错误表。
我已经四处寻找解决方案,但所有内容都指的是 Azure 移动服务而不是应用程序。如果需要,我可以使用我的客户端模型类更新这个问题(我现在在我的 PC 上,无法访问 Mac 上的 Xamarin Studio 项目)。作为引用,这些类与数据对象几乎相同 - 只是每个属性都用 JsonProperty 属性修饰,但服务中概述的虚拟属性除外。为了完整起见,我确实尝试将该属性添加到客户端对象,但它仍然抛出“错误请求”400 错误。
感谢您为我提供的任何指导。
最佳答案
问题很可能是在尝试映射外键时发生的。您是否指定了员工类型的所有字段?我建议您执行以下操作:
使用 Fiddler 或将委托(delegate)处理程序附加到您的客户端来查看传出请求的样子。使用 JSON 正文更新您的评论。请参阅https://github.com/Azure/azure-mobile-apps/wiki/Help,-my-app-isn 't-working!#log-outgoing-requests-in-management-client-xamarin-windows。
将调试器附加到您的服务器项目。您可以在本地运行时或将解决方案部署到 Azure 后执行此操作,但如果在本地运行,您将获得更好的性能。请参阅https://github.com/Azure/azure-mobile-apps/wiki/Help,-my-app-isn 't-working!#remote-debugging-net-server-sdk。
我怀疑问题在于 EmployeeType 在反序列化对象中最终为 null,然后 Entity Framework 拒绝数据库插入。
关于entity-framework - Azure 移动应用-使用外键 "Bad Request"400 错误发布到表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37033659/