1

我希望這是一個簡單的問題。我創建了一個基於示例ToDo項目的Azure移動應用程序項目,添加了我自己的表/數據對象。我遇到的問題是將記錄添加到與另一個具有外鍵關係的表中。下面是我的Employee表的數據對象:Azure移動應用程序 - POST與外鍵「壞請求」400錯誤

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

Employee類的虛擬財產EmployeeType是必要的,我相信,創造在使用EF Code First在數據庫中創建表時與EmployeeType表的關係。 (至少,這是我的理解,它的工作原理)我能夠使用InsertAsync方法將Xamarin客戶端應用程序中的記錄插入到EmployeeType表中,但在嘗試插入Employee時收到「Bad Request」400錯誤表。

我周圍環顧了很多解決方案,但一切都是指Azure移動服務而不是應用程序。如果需要,我可以用我的客戶端模型類更新這個問題(我現在在我的電腦上,無法訪問Mac上的Xamarin Studio項目)。作爲參考,這些類與數據對象幾乎相同 - 只是每個屬性都使用JsonProperty屬性進行裝飾,但服務中概述的虛擬屬性除外。爲了完整起見,我嘗試將該屬性添加到客戶端對象,並且仍然拋出「錯誤請求」400錯誤。

感謝您爲我提供的任何方向。

回答

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。

我懷疑問題是EmployeeType在反序列化的對象中最終爲null,然後實體框架拒絕DB插入。

0

您能否從錯誤的請求中獲得更多信息?嘗試將此添加到表格控制器中

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