我在join table之間有一個多對多的關系Project并Member實作了ProjectMembers。在視圖中,為了添加特定的專案成員,我使用多個選擇哪些存盤MemberId在IEnumerable<int> SelectedMembers.
一切正常,除了我只能用新成員更新(編輯)專案(未選擇并且在保持不變之前是資料庫的一部分的成員)。在發布更新的成員集之前,我需要幫助洗掉ProjectMember連接到特定成員的現有ProjectId成員。我已經嘗試了很多,但到目前為止沒有任何效果。真的任何建議將不勝感激。
這是我的Editpost 方法ProjectController:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Edit(int? id, CreateProjectViewModel viewmodel)
{
Project project = _context.Project
.Single(m => m.ProjectId == id);
project.Name = viewmodel.Name;
project.Budget = viewmodel.Budget;
project.BusinessCase = viewmodel.BusinessCase;
project.StartDate = viewmodel.StartDate;
project.FinishDate = viewmodel.FinishDate;
project.ClientId = viewmodel.ClientId;
// here I need the method to remove the existing instances of Member in ProjectMember
// part of code below is validation that there will be no conflict of PrimaryKeys on ProjectMember, probably can be removed once the Remove method is implemented
foreach (var selectedId in viewmodel.SelectedMembers)
{
var projectID = project.ProjectId;
var memberID = selectedId;
IList<ProjectMember> existingItems = _context.ProjectMembers
.Where(cm => cm.MemberId == memberID)
.Where(cm => cm.ProjectId == projectID).ToList();
if (existingItems.Count == 0)
{
_context.ProjectMembers.Add(new ProjectMember
{
ProjectId = project.ProjectId,
MemberId = selectedId,
});
}
}
_context.SaveChanges();
return RedirectToAction("Index");
}
更新:
基于類似的執行緒,我想出了以下要在新行添加到ProjectMembersPOST Edit之前添加的內容:
var project = _context.Project.Include(a => a.ProjectMembers)
.SingleOrDefault(m => m.ProjectId == id);
if (project != null)
{
foreach (var projectMember in project.ProjectMembers
.Where(at => viewmodel.SelectedMembers.Contains(at.MemberId)).ToList())
{
project.ProjectMembers.Remove(projectMember);
}
_context.SaveChanges();
}
不幸的是,應該洗掉的條目ProjectMembers繼續保留,有人可以建議應該更改什么嗎?
uj5u.com熱心網友回復:
知道了。顯然,這是一種更簡單的方法。下面的代碼是在傳遞新的之前洗掉整個:
var project = _context.Project.Include(a => a.ProjectMembers)
.SingleOrDefault(m => m.ProjectId == id);
foreach (var member in project.ProjectMembers.ToArray())
{
project.ProjectMembers.Remove(member);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/381544.html
標籤:C# 实体框架 模型视图控制器 asp.net-core-mvc 多对多
