私はSQLiteのとオフライン同期機能を使用してアプリケーションを開発するためのAzureアプリケーション・サービス(モバイルアプリ)を使用しています。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ではないため、Entity Frameworkの問題があると思われます。適切なCardIdをCustomerオブジェクトの文字列として設定し、ForeignKeyアノテーションを介してリンクしますか? –
モバイルサービスでは、IDが文字列でなければならない理由がわかりません。コントローラの実装は、モバイルサービスのバックエンドをプロビジョニングするときに、サンプルソリューションで提供される関数の名前の変更です。 – Robin
' PatchCustomer'?それとも、再びインサートを打っていますか? – SWilko