考虑关注实体
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; }
}
根据上面的代码,供应商实体可以有零个或多个产品。在上述实体中,ID 由实体框架自动生成。
我正在使用 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
实体中呢?谁能帮我解决这个问题?