I want to swap items to re order. Reorder index is primary key so I can not edit it. So what I am doing:
- I am searching items with name and cloned it to another object.
- I am also searching previous item on that with key found on case 1. and cloned it to an object.
- I deleted both the search items from DB.
- Insert New replaced item with previous key and change previous cloned item key to a random no. add to DB.
- During search when this preivous item through name in loop it key change from clone and add to db.
Its working when First Compile. But when I reorder again in list then it throws error in Conflicting Primary keys
in both case Attach()
and Remove()
.
Code is as follows
foreach (var item in items)
{
var task = db.ProjectTasks.Where(wh => wh.ProjectID == item.projectID && wh.TaskDesc==item.taksName).FirstOrDefault();
var oldTask = db.ProjectTasks.Where(wh => wh.ProjectID == item.projectID && wh.TaskID == item.taskID).FirstOrDefault();
if (oldTask != null)
{
//db.ProjectTasks.Attach(oldTask);
db.ProjectTasks.Remove(oldTask);
//db.SaveChanges();
}
// var cloneTask = task; //Cloned task to inser same ater delete
var taskClone1 = new ProjectTask {
ActualManHrs=task.ActualManHrs,
AFDate=task.AFDate,
ASDate=task.ASDate,
ConDate=task.ConDate,
DaysComplete=task.DaysComplete,
DaysRemaining=task.DaysRemaining,
Duration=task.Duration,
DurationActual=task.DurationActual,
EFDate=task.EFDate,
ESDate=task.ESDate,
orderIndex=task.orderIndex,
PercentComplete=task.PercentComplete,
PlannedManHrs=task.PlannedManHrs,
PriorTask=task.PriorTask,
ProjectID=task.ProjectID,
ProjectMaster=task.ProjectMaster,
Remarks=task.Remarks,
ResourceCenter=task.ResourceCenter,
TaskDesc=task.TaskDesc,
TaskGroup=task.TaskGroup,
TaskID=item.taskID,
TaskStatus=task.TaskStatus,
WorkingDays=task.WorkingDays
};
var swap1 = new List<ProjectTask>();
swap1.Add(taskClone1);
ProjectTask oldTaskDetails = null;
if (oldTask != null)
{
oldTaskDetails = new ProjectTask
{
ActualManHrs = oldTask.ActualManHrs,
AFDate = oldTask.AFDate,
ASDate = oldTask.ASDate,
ConDate = oldTask.ConDate,
DaysComplete = oldTask.DaysComplete,
DaysRemaining = oldTask.DaysRemaining,
Duration = oldTask.Duration,
DurationActual = oldTask.DurationActual,
EFDate = oldTask.EFDate,
ESDate = oldTask.ESDate,
orderIndex = oldTask.orderIndex,
PercentComplete = oldTask.PercentComplete,
PlannedManHrs = oldTask.PlannedManHrs,
PriorTask = oldTask.PriorTask,
ProjectID = oldTask.ProjectID,
ProjectMaster = oldTask.ProjectMaster,
Remarks = oldTask.Remarks,
ResourceCenter = oldTask.ResourceCenter,
TaskDesc = oldTask.TaskDesc,
TaskGroup = oldTask.TaskGroup,
TaskID = oldTask.TaskID,
TaskStatus = oldTask.TaskStatus,
WorkingDays = oldTask.WorkingDays
};
}
var swap2 = new List<ProjectTask>();
swap2.Add(oldTaskDetails);
if(task!=null) //Check Nll or not
{
db.ProjectTasks.Remove(task); //2nd time on ward Primary key voilation
db.SaveChanges();
db.ProjectTasks.AddRange(swap1); //2nd time on ward Primary key voilation
if (oldTaskDetails != null)
{
oldTaskDetails.TaskID = Guid.NewGuid().ToString().Substring(0, 4);
db.ProjectTasks.AddRange(swap2);
}
}
//db.SaveChanges();
}