C# 更新父记录时,子记录中的EF被删除
添加父记录和子记录时,将忽略子记录;更新父记录时,将删除子记录(如果存在)C# 更新父记录时,子记录中的EF被删除,c#,entity-framework,C#,Entity Framework,添加父记录和子记录时,将忽略子记录;更新父记录时,将删除子记录(如果存在) public ItemResponse<bool> SyncUp(List<DAL.Entities.Task> Tasks, Guid UserClientID) { using (IUnitOfWork uow = new DAL.Data.UnitOfWork(new DAL.DataContext.DatabaseContext(DAL.DataContext
public ItemResponse<bool> SyncUp(List<DAL.Entities.Task> Tasks, Guid UserClientID)
{
using (IUnitOfWork uow = new DAL.Data.UnitOfWork(new DAL.DataContext.DatabaseContext(DAL.DataContext.DatabaseContext.ops.dbOptions)))
{
var Res = AddUpdateRange(uow, Tasks);
uow.Complete();
return Res;
}
}
public ItemResponse<bool> AddUpdateRange(Web.DAL.Inteface.IUnitOfWork uow, List<DAL.Entities.Task> tasks)
{
try
{
var taskOrganisationRels = tasks.SelectMany(p => p.OrganisationTaskRels).DistinctBy(p=>p.ID).ToList();
var taskStoreRels = tasks.SelectMany(p => p.StoreTaskRels).DistinctBy(p=>p.ID).ToList();
var taskUserCompletionRels = tasks.SelectMany(p => p.TaskUserCompletionRels).DistinctBy(p=>p.ID).ToList();
var taskJobTitleRels = tasks.SelectMany(p => p.JobTitleTaskRels).DistinctBy(p=>p.ID).ToList();
var tasksNotesRels = tasks.SelectMany(p => p.TaskNoteRels).DistinctBy(p=>p.ID).ToList();
var tasksUsersRels = tasks.SelectMany(p => p.TaskUserRels).DistinctBy(p=>p.ID).ToList();
var notes = tasksNotesRels.Select(p => p.Note).DistinctBy(p=>p.ID).ToList();
var tasksList = tasks.Select(p =>
{
p.TaskNoteRels.Clear();
p.CaseTaskRels.Clear();
p.TaskUserRels.Clear();
p.JobTitleTaskRels.Clear();
p.OrganisationTaskRels.Clear();
p.StoreTaskRels.Clear();
p.LastSyncDateTime = DateTimeOffset.Now;
return p;
}).DistinctBy(p => p.ID).ToList();
uow.Tasks.AddUpdateRange(tasksList);
if (tasksNotesRels.Any())
{
if (notes.Any())
{
(new NoteLogic()).AddUpdateRange(uow, notes);
}
uow.TaskNoteRel.AddUpdateRange(tasksNotesRels.Select(p =>
{
p.Note = null;
p.Task = null;
p.LastSyncDateTime = DateTimeOffset.Now;
return p;
}).DistinctBy(p => p.ID));
}
return new ItemResponse<bool>(true);
}
catch (Exception Exc)
{
throw Exc;
}
}
public ItemResponse<bool> AddUpdateRange(Web.DAL.Inteface.IUnitOfWork uow, List<Entity.Note> Items)
{
try
{
var NoteFileRels = Items.Where(p => p.NoteFileRels.Any()).SelectMany(p => p.NoteFileRels).ToList();
var Files = NoteFileRels.Where(p => p.File != null).Select(p => p.File).ToList();
uow.Notes.AddUpdateRange(Items);
if (NoteFileRels.Any())
{
if (Files.Any())
{
(new FileLogic()).AddUpdateRange(uow, Files);
}
uow.NoteFileRel.AddUpdateRange(NoteFileRels.Select(p=>
{
p.Note = null;
p.File = null;
return p;
}).DistinctBy(p => p.ID));
}
return new ItemResponse<bool>(true, null);
}
catch (Exception Exc)
{
return new ItemResponse<bool>(false, Exc);
}
}
uow.NoteFileRel.AddUpdateRange(NoteFileRels.Select(p=>
{
p.Note = null;
p.File = null;
return p;
}).DistinctBy(p => p.ID));