【发布时间】:2016-02-26 03:31:30
【问题描述】:
考虑以下实体
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 由 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 实体?
谁能帮我解决这个问题?
【问题讨论】:
标签: c# entity-framework asp.net-web-api odata odata-v4