2016-01-27 3 views
0

В моем веб-приложении mvc4 мне нужно скопировать все данные одной формы, которые были сохранены ранее в другой вновь созданной форме. Но когда я копирую данные, используя следующий код, все данные перемещаются из одной формы в другую, а данные из предыдущей формы удаляются. Укажите, почему это происходит и как копировать эти данные.Скопировать одну форму Данные в другую форму Entity Framework

public FormEntity CopyFormData(CopyForm copyForm) 
    { 
     using (SIPSEntities db = new SIPSEntities()) 
     { 

      if (db.QmsEvaluationForms.Where(x => x.IsActive == true).Any(x => x.FormName == copyForm.FormName)) 
      { 
       throw new Exception("Form Name Already Exists!"); 
      } 
      else 
      { 
       var copyData = (from log in db.QmsEvaluationForms 
           where log.EvaluationFormId == copyForm.CopyFrom && log.IsActive == true 
           select new 
           { 
            ZeroOnFatal = log.MakeScoreZeroOnFatal, 
            FormControls = (from log1 in log.QmsEvaluationFormControls where log1.IsActive == true select log1).ToList(), 
            FormParameters = (from log1 in log.QmsEvaluationParameters where log1.IsActive == true select log1).ToList() 
           }).FirstOrDefault(); 

       //Insert new form 

       QmsEvaluationForm newForm = new QmsEvaluationForm(); 
       newForm.FormName = copyForm.FormName; 
       newForm.MakeScoreZeroOnFatal = copyData.ZeroOnFatal; 
       newForm.IsActive = true; 
       newForm.CreatedOn = DateTime.Now; 
       newForm.SubprocessId = copyForm.SubProcessId; 

       //(copy data from child table) this data is deleted from previous form and copied to another form 
       newForm.QmsEvaluationFormControls = copyData.FormControls; 

       //(copy data from child table) this data is deleted from previous form and copied to another form 
       newForm.QmsEvaluationParameters = copyData.FormParameters; 
       db.QmsEvaluationForms.Add(newForm); 
       db.SaveChanges(); 
       return new FormEntity { FormId = newForm.EvaluationFormId, FormName = newForm.FormName, MakeZero = newForm.MakeScoreZeroOnFatal }; 


      } 


     } 
    } 
+0

Когда u означает форму. U означает HTML-форму. Кокс код ниже выглядит нормально. –

+0

Нет данных из обеих дочерних таблиц db не копируется, а переходит из объекта предыдущей формы в объект формы. – VIVEK

ответ

0

Я получил решение этой проблемы, отлаживая мой код много раз. что происходит здесь, когда я копирую он данные ребенка таблицы в новой форме в

newForm.QmsEvaluationFormControls = copyData.FormControls; 

и newForm.QmsEvaluationParameters = copyData.FormParameters;

внешний ключ каждой строки изменяется на первичный ключ новой формы. Теперь, когда я копирую данные по следующему методу, каждая вещь работает нормально -

public FormEntity CopyFormData(CopyForm copyForm) 
    { 
     using (SIPSEntities db = new SIPSEntities()) 
     { 

      if (db.QmsEvaluationForms.Where(x => x.IsActive == true).Any(x => x.FormName == copyForm.FormName)) 
      { 
       throw new Exception("Form Name Already Exists!"); 
      } 
      else 
      { 

       var copyData = (from log in db.QmsEvaluationForms 
           where log.EvaluationFormId == copyForm.CopyFrom && log.IsActive == true 
           select log).FirstOrDefault(); 
       //Insert new form 
       List<QmsEvaluationFormControl> cloneFormControlList = (from log1 in copyData.QmsEvaluationFormControls where log1.IsActive==true select log1).ToList(); 
       List<QmsEvaluationParameter> clonePaameterList = (from log1 in copyData.QmsEvaluationParameters where log1.IsActive == true select log1).ToList(); 
       QmsEvaluationForm newForm = new QmsEvaluationForm(); 
       newForm.FormName = copyForm.FormName; 
       newForm.MakeScoreZeroOnFatal = copyData.MakeScoreZeroOnFatal; 
       newForm.IsActive = true; 
       newForm.CreatedOn = DateTime.Now; 
       newForm.SubprocessId = copyForm.SubProcessId; 
       foreach(var control in cloneFormControlList){ 
        QmsEvaluationFormControl controlData=new QmsEvaluationFormControl(); 
        controlData.Caption=control.Caption; 
        controlData.CreatedOn=DateTime.Now; 
        controlData.FieldTypeId=control.FieldTypeId; 
        controlData.FormValidationParameterId=control.FormValidationParameterId; 
        controlData.ListNameId=control.ListNameId; 
        controlData.IsMandatory=control.IsMandatory; 
        controlData.MaxSize=control.MaxSize; 
        controlData.IsActive=control.IsActive; 
        newForm.QmsEvaluationFormControls.Add(controlData); 

       } 

       foreach (var parameter in clonePaameterList) 
       { 
        QmsEvaluationParameter parameterData = new QmsEvaluationParameter(); 
        parameterData.Category = parameter.Category; 
        parameterData.ParameteerCode = parameter.ParameteerCode; 
        parameterData.EvaluationParameter = parameter.EvaluationParameter; 
        parameterData.ListNameId = parameter.ListNameId; 
        parameterData.CriticalTypeId = parameter.CriticalTypeId; 
        parameterData.Weightage = parameter.Weightage; 
        parameterData.IsActive = parameter.IsActive; 
        parameterData.CreatedOn = DateTime.Now; 
        newForm.QmsEvaluationParameters.Add(parameterData); 
       } 
       db.QmsEvaluationForms.Add(newForm); 
       db.SaveChanges(); 
       return new FormEntity { FormId = newForm.EvaluationFormId, FormName = newForm.FormName, MakeZero = newForm.MakeScoreZeroOnFatal }; 


      } 


     } 
    } 
Смежные вопросы