我正在使用.net MVC 4和EF 5。 我有一个具有Master详细结构的模型,如:
public partial class Master
{
public int IdMaster { get; set; }
public String MasterName {get; set;}
public virtual ICollection<Detail> details { get; set; }
}
public partial class Detail
{
public int IdDetail { get; set; }
public String DetailName{get; set;}
public virtual Master master { get; set; }
}
我创建了一个&#34;创建&#34;查看我有Master和js代码的输入字段 用于添加详细信息行。一切都完美无瑕,&#34;创造&#34; HTTP POST控制器完美地绑定所有内容并编写代码:
context.Master.Add(master);
context.SaveChanges();
在Master表和Detail表中插入。
但是当我做编辑帖子时...我的debuger告诉我绑定是好的,我在一些Detail行和一些新行上有一些更新例如...... 但在完成帖子后,我只获得Master表的更新,而Detail与编辑前相同。
目前,我正在使用解决方法,删除所有细节并将其重新插入&#34;编辑&#34;编辑主人之前的控制器,但是如果有一个解决方案,EF可以检测到这种变化并处理细节,我很有意思......
更新1:
[HttpPost]
public ActionResult Edit(Master master)
{
if (ModelState.IsValid)
{
db.Entry(master).State = EntityState.Modified;
db.SaveChanges();
-- this updates only the Master table
-- but my Collection Master.details which has some new and some updated
-- element properties does not change in database.
-- How can EF do adding, deleting and inserting into Details table based on my Collection?????
}
}
感谢您的时间
答案 0 :(得分:0)
使用相同的enitymodel,我可以更新详细信息。下面是示例代码。由于您还没有共享任何代码,我认为您必须具有masterid和detail id,然后您正在更新它。
using (var context = new TestDbContext())
{
var master = context.Master.Include(x=>x.details).FirstOrDefault(f => f.IdMaster == 1);
if(master!=null)
{
// hre if you want to update the detail with id detaiid= 1
var detail = master.details.FirstOrDefault(d => d.IdDetail == 1);
if (detail != null)
{
detail.DetailName = "update detail";
}
context.Entry(master).State = EntityState.Modified;
context.SaveChanges();
}
}