我正在使用Azure應用程序服務(移動應用程序)與SQLite一起使用脫機同步功能來開發應用程序。 我的數據對象模型是:Azure應用程序服務(移動應用程序)違反PRIMARY KEY約束
public class Customer : EntityData
{
public string FirstName { get; set; }
public string LastName { get; set; }
//…
public DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
public virtual IList<Card> Cards { get; set; }
}
public class Card : EntityData
{
public bool IsDisabled { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime LastUsedDate { get; set; }
}
而且我的控制器代碼:
// GET tables/Customer
public IQueryable<Customer> GetAllCustomers()
{
return Query();
}
// GET tables/Customer/48D68C86-6EA6-4C25-AA33-223FC9A27959
public SingleResult<Customer> GetCustomer(string id)
{
return Lookup(id);
}
// PATCH tables/Customers/48D68C86-6EA6-4C25-AA33-223FC9A27959
public Task<Customer> PatchCustomer(string id, Delta<Customer> patch)
{
return UpdateAsync(id, patch);
}
// POST tables/Customer
public async Task<IHttpActionResult> PostCustomer(Customer item)
{
Customer current = await InsertAsync(item);
return CreatedAtRoute("Tables", new { id = current.Id }, current);
}
// DELETE tables/Customer/48D68C86-6EA6-4C25-AA33-223FC9A27959
public Task DeleteCustomer(string id)
{
return DeleteAsync(id);
}
我不太清楚這是怎麼幕後映射,但是從我的客戶,我呼籲:
await App.MobileService.SyncContext.PushAsync();
await customerTable.PullAsync("customers", customerTable.CreateQuery());
當我執行數據的初始同步插入客戶時,所有工作都很好,但是,當我嘗試更新其中的任何一個時,我收到一個錯誤「操作因協作失敗nflict:'違反PRIMARY KEY約束'PK_dbo.Cards'。無法在對象'dbo.Cards'中插入重複鍵。重複的鍵值是(000000003414)。注意我沒有更改卡的詳細信息,只有客戶。 我看到這個職位:https://blogs.msdn.microsoft.com/azuremobile/2014/06/18/insertupdate-data-with-1n-relationship-using-net-backend-azure-mobile-services/ 但是,它似乎過於複雜,我不知道這是我之後...有誰知道發生了什麼?
我懷疑你正在查看一個實體框架的問題,因爲Id是一個字符串 - 而不是一個int。在你的Customer對象中設置合適的CardId作爲字符串,然後通過ForeignKey註釋鏈接,也許? –
移動服務需要Id是一個字符串,不知道爲什麼......當您提供移動服務後端時,我的控制器實現只是樣本解決方案提供的函數的重命名...... – Robin
您是否已將斷點放在' PatchCustomer'?或者它再次擊中插入? – SWilko