2017-02-14 3 views
0

Оператор обновления, вставки или удаления магазина повлиял на неожиданный количество строк (0). Объекты могут быть изменены или удалены с момента загрузки объектов. См. http://go.microsoft.com/fwlink/?LinkId=472540 для получения информации об понимания и обработки оптимистичных исключений параллелизма.Невозможно добавить/изменить сущность в БД, используя приставку/запись из-за оптимистической ошибки параллелизма.

в следующей функции (действие MVC):

// POST: api/Day 
    public void Post(int bed, DateTime date, float operatingTime) 
    { 
     Day currentDay = new Day() 
     { 
      Date = date, 
      BedId = bed, 
      OperatingTime = operatingTime 
     }; 

     db.Entry(currentDay).State = EntityState.Modified; 
     db.SaveChanges(); 
    } 

Day класс выглядит следующим образом:

using System; 
using System.Collections.Generic; 

public partial class Day 
{ 
    public int Id { get; set; } 
    public float OperatingTime { get; set; } 
    public System.DateTime Date { get; set; } 
    public int BedId { get; set; } 

    public virtual Bed Bed { get; set; } 
} 

В действии конкретного Day может или не может уже существовать. Я намерен создать новый Day, если он не существует или обновляется. Таблица имеет Date и BedId как составной первичный ключ.

Я также попытался «прикреплять» сущность сначала.

Я ошибаюсь в предположении, что мой код создаст новую запись, если один с соответствующим (составным) ключом не существует?

Спасибо!

ответ

1

Ваша логика не создаст новую запись, если она не найдена. EntityState.Modified создаст заявление UPDATE. Если вы хотите вставить, если не нашли, вам нужно сначала запросить db. Мне не нравится идея делать вставку ИЛИ обновление внутри метода под названием Post, но если вы предпочитаете это, вы можете попробовать что-то вроде:

// POST: api/Day 
public void Post(int bed, DateTime date, float operatingTime) 
{ 
    Day currentDay = new Day() 
    { 
     Date = date, 
     BedId = bed, 
     OperatingTime = operatingTime 
    }; 

    var dayExists = db.Day.FirstOrDefault(d => d.Date == date && d.BedId == bed); 

    if (dayExists != null) 
    { 
     // you have a record, so update it 
     db.Entry(currentDay).State = EntityState.Modified; 
    } 
    else 
    { 
     // no record found, insert one 
     db.Entry(currentDay).State = EntityState.Added; 
    } 

    db.SaveChanges(); 
}