我有两个实体:Invoice和InvoiceDetail。
Invoice有一个InvoiceDetails成员。
当我创建一个obcjet时,它按预期工作。
框架在数据库中插入Invoice和InvoiceDetail行。
$.ajax({
url: "/Invoices/Index",
data: JSON.stringify({
InvoiceDetails: [{
Description: "1"
}, {
Description: "2"
}]
}),
contentType: "application/json",
type: "POST"
});
[ActionName("Index")]
[HttpPost]
public JsonResult Post(Invoice invoice)
{
db.Invoices.AddObject(invoice);
db.SaveChanges();
...
我还想更新发票和相关的InvoiceDetails。
$.ajax({
url: "/Invoices/Index/1",
data: JSON.stringify({
Id: 1,
InvoiceDetails: [{
Id: 1,
Description: "1*"
}, {
Id: 2,
Description: "2*"
}]
}),
contentType: "application/json",
type: "PUT"
});
[ActionName("Index")]
[HttpPut]
public JsonResult Put(Invoice invoice)
{
db.Invoices.Attach(invoice);
db.ObjectStateManager.ChangeObjectState(invoice, EntityState.Modified);
db.SaveChanges();
...
但框架只更新发票。
我如何更新相关实体?
我的模型看起来像这样
编辑:解决方案 http://michele.berto.li/update-of-an-object-and-related-records-with-backbonejs-and-net-mvc
更新链接 http://michele.berto.li/update-of-an-object-and-related-records-with-backbone-js-and-net-mvc/
答案 0 :(得分:1)
当您致电ChangeObjectState
时,您正在改变单个实体的状态,关系保持不变状态。因此,如果您只修改现有发票详细信息,则可以简单地迭代这些详细信息并将其设置为修改状态。如果您还可以添加或删除详细信息,则它将为much more complicated,您必须手动将请求中的状态与数据库中的状态同步(首先从@Hammerstein建议的数据库中加载发票详细信息)或使用某些约定查找必须将哪些详细信息设置为已删除或添加状态,而不在数据库中进行检查。
答案 1 :(得分:0)
我没有使用Attach多,通常我查询数据库,更新记录和ave更改。但我相信您附加的发票与发票明细没有相同的关联。您需要将该记录拉出来,更新它然后保存更改。