Azure App Serviceを使用して1:nの関係が必要です。エンティティの場合はI followed this tutorialです。Azure Appサービスで1:nの関係を持つエンティティを挿入するには
私のクライアントエンティティ(チュートリアルと同じで、私はコンストラクタを追加した以外):
public abstract class Entity {
// defines id, version, createdAt, updatedAt, deleted
}
public class Animal : Entity {
public string Name { get; set; }
}
public class Zoo : Entity {
public Zoo() { Animals = new List<Animal>(); }
public string Name { get; set; }
public List<Animal> Animals { get; set; }
}
私のサーバーエンティティ(チュートリアルと同じ、私はコンストラクタを追加した以外):
public class Animal : EntityData {
public string Name { get; set; }
}
public class Zoo : EntityData {
public Zoo() { Animals = new List<Animal>(); }
public string Name { get; set; }
public virtual ICollection<Animal> Animals { get; set; }
}
ZooController
テーブルコントローラー(ストック足場コード、属性を追加したものを除く):
[HttpPatch]
public Task<Zoo> PatchZoo(string id, Delta<Zoo> patch) {
return UpdateAsync(id, patch);
}
[HttpPost]
public async Task<IHttpActionResult> PostZoo(Zoo item) {
Zoo current = await InsertAsync(item);
return CreatedAtRoute("Tables", new { id = current.Id }, current);
}
Animal
の同様のテーブルコントローラがあります。
問題が発生しました。は、私は、クライアントからの挿入および更新を行います。
// create animal (child)
var animal = new Animal() { Name = "Dumbo" };
await animalTable.InsertAsync(animal);
// create zoo (parent)
var zoo = new Zoo() { Name = "Tokyo National Zoo" };
await zooTable.InsertAsync(zoo);
// add animal to zoo
zoo.Animals.Add(animal);
await zooTable.UpdateAsync(zoo);
// push
await zooTable.MobileServiceClient.SyncContext.PushAsync();
これは例外をスローします。サーバー上ではStatusCode: 409, ReasonPhrase: 'Conflict'
でスローされ、クライアント上では"The operation failed due to a conflict: 'Violation of PRIMARY KEY constraint 'PK_dbo.Animals'. Cannot insert duplicate key in object 'dbo.Animals'
でスローされます。基本的に、サーバは同じAnimal
レコードを2度挿入しようとしていると言っています。
私は間違っていますか?
私はいくつかのデバッグを行い、 'Animal'コントローラのPOSTメソッドが呼び出され、その後は' Zoo'コントローラのPOSTに気付きました。したがって、2回目のPOST操作では、2重挿入が行われます。でも、どうやって止めるの? –
animalTable.InsertAsync()を削除しようとしましたか?ちょうど私が持っていた考え。 – juunas