Переберите списки DBContext и модели данных интерфейса пользователя с помощью ForEach для определения SaveChanges - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть пользовательский интерфейс с 4 текстовыми полями для данного вопроса. Каждое текстовое поле - это ответы на заданный вопрос. Каждый раз, когда пользователь нажимает кнопку Сохранить. Это делает привязку модели со значениями для 4 текстового поля и QuestionId. Это из JS файла. Ниже класс модели представляет мой

1) DBModel ===> originalDBAnswers

2) UIModel ==> UITextboxclickAnswers

Я пишу это в консольном приложении, так как не могу показать свой код здесь. Спасибо за понимание.

  public class SaveAnswer
{
    static void Main(string[] args)
    {
        // This is a DB context. original values from DB that i pulled into a list
        List<originalDBAnswers> orginalDBValues = new List<originalDBAnswers>()
        {
            //dummy data to represent my DB column values i can bind my model and filter it by questionID = 111
            new originalDBAnswers() {PK_Id = 1, FK_question = 111, Value = 10 },  
            new originalDBAnswers() {PK_Id = 2, FK_question = 111, Value = 20 },
            new originalDBAnswers() {PK_Id = 3, FK_question = 111, Value = 30 },
            new originalDBAnswers() {PK_Id = 4, FK_question = 111, Value = 40 }

        };

Здесь текстовое поле значения и идентификатор вопроса передаются в обработчик. Как вы можете видеть, значение для 1-го элемента изменено по сравнению с исходным значением DBValues, равным 999.

Итак, чего я ожидаю: вместо значения 10 в originalDBValue я хочу 999.

        List<UITextboxclickAnswers> uiValuesofTextboxfromJSfile = new List<UITextboxclickAnswers>()
        {
            //dummy data to 
            new UITextboxclickAnswers() {FK_question = 111, Value = 999}, // here 999 is the changed in UI which needs to be save in DB
            new UITextboxclickAnswers() {FK_question =111, Value = 20},
            new UITextboxclickAnswers() {FK_question = 111, Value = 30},
            new UITextboxclickAnswers() {FK_question = 111, Value = 40}

        };


        SaveModifiedAnswer(orginalDBValues, uiValuesofTextboxfromJSfile);


    }

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

    private static void SaveModifiedAnswer(List<originalDBAnswers> orginalDBValues, List<UITextboxclickAnswers> uiValuesofTextboxfromJSfile)
    {
     **//this is how i pull the data from DB**
        var multiAnswerDB = Context.GetDBSet<originalDBAnswers>().Where(a => a.FK_question == 111).ToList();


//this logic needs to be changed 
   foreach (var dBItem in multiAnswerDB)
        {
            foreach (var uiItem in uiValuesofTextboxfromJSfile)
            {
                //if the question key match but the value does not match in the DB 
                if (uiItem.FK_question == dBItem.Fk_Item && uiItem.Value != dBItem.Value)
                {
                    //Here i need to save changes in the DB if the value is not equal for that key
                    dBItem.value = uiItem.Value;

                    Context.SaveChanges(); 

                }
            }

        }
    }
}

public class originalDBAnswers
{
    public int PK_Id { get; set; }   //databse Identity column 
    public int  Value { get; set; }  //value from Database
    public int FK_question { get; set; } //FK question ID 
}

public class UITextboxclickAnswers
{
    public int Value { get; set; }     //value from the textBox
    public int FK_question { get; set; }  // given question key 

}

Спасибо, что посмотрели, я изо всех сил старался описать проблему, пожалуйста, не стесняйтесь задавать мне любые вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...