0
我有兩個具有多對多關係的實體(TaskStep和Role),我使用一個視圖模型(名爲StepViewModel)來顯示taskstep,它允許角色,StepViewModel是:通過實體框架中的視圖模型保存很多關係6
public class StepViewModel
{
public StepViewModel()
{
}
public TaskStep TaskStep { get; set; }
public virtual ICollection<AllowedRole> AllowedRole { get; set; }
}
,我用這個方法來顯示taskstep:
public static StepViewModel GetTaskStepData(int stepId)
{
using (var context = new WFContext())
{
return context.TaskSteps.Where(ts => ts.ID == stepId).Include(ts => ts.Roles)
.Select(ts => new StepViewModel()
{
AllowedRole = context.Roles.Select(r => new AllowedRole()
{
Role = r,
Allowed = ts.Roles.Select(x => x.ID).Contains(r.ID)
}).ToList(),
TaskStep = ts
})
.SingleOrDefault();
}
}
但是當我保存taskstep,它的角色轉變不保存。我的保存方法是:
public static void SaveTaskStep(StepViewModel stepViewModel)
{
using (var context = new WorkFlowContext())
{
//TaskStep taskStep = context.TaskSteps.Where(ts => ts.ID == stepViewModel.TaskStep.ID).Include(ts => ts.Roles).SingleOrDefault();
TaskStep taskStep = stepViewModel.TaskStep;
List<int> aRolesIDs = stepViewModel.AllowedRole.Where(ar => ar.Allowed == true).Select(ar => ar.Role.ID).ToList();
List<Role> roles = context.Roles.Where(r => aRolesIDs.Contains(r.ID)).Include(r => r.AllowedTaskSteps).ToList();
taskStep.Roles.Clear();
foreach (Role role in roles)
{
if (context.Entry(role).State == EntityState.Detached)
context.Roles.Attach(role);
taskStep.Roles.Add(role);
}
if (taskStep.ID == 0)
context.TaskSteps.Add(taskStep);
else
context.Entry(taskStep).State = EntityState.Modified;
context.SaveChanges();
}
}
,如果我從數據庫獲取與包括taskstep角色(如在保存方法首先-comment-線),它工作的很好。但通過這種方式,我必須手動完成所有任務步驟字段的更改。另外,當我將任務步驟分配給stepviewmodel時,我使用「include」,但它仍然不起作用。我該如何保存stepViewModel角色?
它工作的很好,當taskstep插入,而不是編輯taskstep(像我的代碼)。 –
@MasoumehKarvar是否在我的例子之前的任何其他操作之前調用'Attach'?還要確保在你的'TaskStep'類中標記爲'virtual'的'Roles'集合 –