Если идентификатор существует, удалите перед вставкой, чтобы избежать дублирования (C# / ASP. NET) - PullRequest
0 голосов
/ 07 мая 2020

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

Можно ли попросить помощи, чтобы выяснить, какая часть будет проверять идентификатор перед вставкой?

Я буду продолжать пытаться выяснить это самостоятельно, но надеюсь кто-то может предложить некоторую помощь, если возможно.

Вот мой код:

public ActionResult InsertData(List<Meeting> meeting)
{
    bool status = false;

    if (ModelState.IsValid)
    {
        using (MeetingEntities db = new MeetingEntities())
        {
            foreach (var i in meeting)
            {
                db.Meeting.Add(i);
            }

            db.SaveChanges();
            status = true;
        }
    }

    return new JsonResult { Data = new { status = status } };
}

Table Definition

Спасибо,

Эразмо

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Сравните его с нашим списком встреч, прежде чем добавлять в объект контекста, например

            using (MeetingEntities db = new MeetingEntities())
            {
                foreach (var i in meeting)
                {
                    if(!meeting.Any(x => x.ID == i.ID)) {
                    db.Meeting.Add(i);
                   }
                }
                db.SaveChanges();
                status = true;
            }

Вы сказали, * Мне нужно проверить, и, если существует, удалите эти записи с этим MeetingId * .. тогда вы можете сделать что-то вроде ниже

var meetingIds = meeting.Select(x => x.ID).ToList();
db.Meeting.Where(x => meetingIds.Contains(x.ID))
               .ToList().ForEach(db.Meeting.DeleteObject);
db.SaveChanges();

Ну, вы можете комбинировать эти операции

            using (MeetingEntities db = new MeetingEntities())
            {
                //insert operation
                foreach (var i in meeting)
                {
                    if(!meeting.Any(x => x.ID == i.ID)) {
                    db.Meeting.Add(i);
                   }
                }

                //Delete Operation
              var meetingIds = meeting.Select(x => x.ID).ToList();
              db.Meeting.Where(x => meetingIds.Contains(x.ID))
               .ToList().ForEach(db.Meeting.DeleteObject);

                // Save the changes
                db.SaveChanges();
                status = true;
            }
1 голос
/ 07 мая 2020

возможно, попробуйте проверить, присутствует ли он уже, если не вставьте его .. например:

public ActionResult InsertData(List<Meeting> meeting)
        {
            bool status = false;
            if (ModelState.IsValid)
            {
                using (MeetingEntities db = new MeetingEntities())
                {

                    foreach (var i in meeting)
                    {
                        if(db.Meeting.FirstOrDefault(xx=>xx. ID == i. ID) == null)
                        {
                         db.Meeting.Add(i);
                        }

                    }
                    db.SaveChanges();
                    status = true;
                }
            }
            return new JsonResult { Data = new { status = status } };
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...