gpt4 book ai didi

asp.net-mvc-3 - Entity Framework :更新相关实体

转载 作者:行者123 更新时间:2023-12-02 04:04:05 25 4
gpt4 key购买 nike

我有两个实体:Invoice和InvoiceDetail。

发票有一个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();
...

我还想更新Invoice和相关的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/

最佳答案

当您调用ChangeObjectState时,您正在更改单个实体的状态,关系保持不变。因此,如果您仅修改现有的发票明细,则可以简单地迭代这些明细并将其设置为已修改状态。如果还可以添加或删除详细信息,则为much more complicated,您将必须手动将请求中的状态与数据库中的状态同步(如@Hammerstein建议,首先从数据库中加载详细信息的发票),或使用某种约定来查找必须包含哪些详细信息设置为已删除或已添加状态,而无需在数据库中进行检查。

关于asp.net-mvc-3 - Entity Framework :更新相关实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8615633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com