次のエンティティを検討してください
public class Supplier
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Product> Products { get; set; }
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
public int? SupplierId { get; set; }
public virtual Supplier Supplier { get; set; }
}
上記のコードに従って、サプライヤー エンティティは 0 個以上の製品を持つことができます。上記のエンティティでは、ID は Entity Framework によって自動生成されます。
Odata V4 クライアント コード ジェネレーターを使用しています。
クライアントコード:
Supplier s = new Supplier{...}
OdataContext.AddToSuppliers(s);
Product p = new Product{...}
p.SupplierId = s.Id;
OdataContext.AddToProduct (p);
OdataContext.SaveChanges();
サプライヤー管理者:
public async Task<IHttpActionResult> Post(Supplier supplier)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Supplier.Add(supplier);
await db.SaveChangesAsync();
return Created(supplier);
}
製品コントローラー:
public async Task<IHttpActionResult> Post(Product product)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Products.Add(product);
await db.SaveChangesAsync();
return Created(product);
}
変更を保存すると、次のエラー メッセージが表示されます。
INSERT ステートメントが FOREIGN KEY 制約と競合しました。
エラーの理由は、Product
エンティティがSupplierId
データベースで生成されたキーをまだ持っていないためです。
では、レコードを保存しながらエンティティに追加SupplierId
するにはどうすればよいでしょうか? Product
誰でもこの問題を解決するのを手伝ってもらえますか?