我首先在WPF应用中使用EF6代码。我有一个部分,允许用户更新或添加新任务。任务和人员之间存在多对多关系。这是我试图在其中将新任务(或更新现有任务)实际添加到数据库的代码部分:
using (TESterContext context = new TESterContext())
{
if (TaskToEdit.Id == 0)
{
TaskToEdit.CreatedDatetime = DateTime.Now;
TaskToEdit.CreatedById = AppState.CurrentUser.Id;
TaskToEdit.Completed = false;
TaskToEdit.Archived = false;
context.Tasks.Add(TaskToEdit);
context.SaveChanges();
TaskToEdit = context.Tasks.
Include(pa => pa.PeopleAssigned).
SingleOrDefault(tk => tk.Id == TaskToEdit.Id);
}
else
{
TaskToEdit.PeopleAssigned.Clear();
context.Entry(TaskToEdit).State = EntityState.Modified;
context.SaveChanges();
}
foreach (Person per in AssignedPeople)
{
TaskToEdit.PeopleAssigned.Add(per);
}
int response = context.SaveChanges();
etc
现在,当我添加一个新任务时,一切都会进行得很顺利,除了它将已经存在的人员添加到具有新ID号(即使他们已经具有ID)的人员表中。我希望它只是使人们与任务相关,而不是再次添加他们。
我没有用于联接表的模型,所以我不能仅在其中添加新行。另外,如果重要的话,我已经关闭了代理的创建(因为我要拉出数据,关闭上下文,弄乱数据然后再放回去,这会创建各种不同的上下文错误)