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

相關問題