2

asp.net的MVC 4,实体框架5时,SQL Server 2012点快速asp.net MVC 4 - 许多不更新许多数据 - 更新实体框架与视图模型,编辑,查看

我有一个地方的模型:

public virtual int PlaceID { get; set; } 
public virtual ICollection<Tag> Tags { get; set; } 
public virtual string Name { get; set; } 

和相关标签型号:

public virtual int TagID { get; set; } 
public virtual string Name { get; set; } 
public virtual string NamePlural { get; set; } 
public virtual ICollection<Place> Places { get; set; } 

多对多的关系。

存在与以下ViewModel关联的视图。在其中,我可以编辑地点详细信息 - 并编辑与该地点关联的标签(例如,该地点可能有“餐馆”标签和“酒吧”标签),也许我想添加“咖啡厅”标签,并且删除'餐厅'标签)。

PlacesWithTagsViewModel:

public Place place { get; set; } 
public ICollection<Tag> SelectedTags { get; set; } 

当视做一个httpost回到控制器 - 我更新标签是这样的:

place.Tags = SelectedTags 
db.Entry(ptvm.place).State = EntityState.Modified; 
db.SaveChanges(); 

然而,地方性质的更新(如名称) - 但标签始终保持一样。

如何更新标签?

+0

我有同样的问题。最后,我不得不先删除所有子实体,然后向父实体添加新实体。如果你想要这种方法,请告诉我给你一个例子 – AminSaghi

回答

0

避免db.Entry(ptvm.place).State = EntityState.Modified;,因为它会导致没有更新的冲突。

您必须使用UpdateModel(table object,“model”);

完整的例子是初级讲座:

[HttpPost] 
public ActionResult PlaceTag(PlacesWithTagsViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     tag tagtest = GetTagById(model.tagid); 
     tag.name= model.tag.name; 
     tag.nameplural = model.tag.nameplural; 
     UpdateModel(tag, "model"); 
     db.SaveChanges(); 
     return RedirectToAction("Index", "Dashboard", new { id = 5 }); 
    } 
} 

的UpdateModel的好处是,你必须只提那些更新避免那些保持静态字段。通过这种方式,您可以在编辑视图中使用Viewmodel更新您的相关数据。

+0

谢谢。我没有解释清楚。没有标签在这里更新 - 我只需要更新与地方相关的标签。 (多对多的关系)。例如 - 一个地方可以被标记为'餐厅'和'咖啡厅'。我可能想要在更新期间关联一个额外的标签“栏”,并删除一个“餐馆”。 – niico

+0

我已经更新了澄清这一点的问题。 – niico

+0

你能否澄清一下db.Entry(model).State = EntityState.Modified有什么问题;原因造成的?微软将它包含在脚手架中是不是一个好主意? – niico

相关问题