Sto cercando di aggiornare i record usando EF6. Prima di trovare il record, se esiste, aggiornalo. Ecco il mio codice: -
var book = new Model.Book
{
BookNumber = _book.BookNumber,
BookName = _book.BookName,
BookTitle = _book.BookTitle,
};
using (var db = new MyContextDB())
{
var result = db.Books.SingleOrDefault(b => b.BookNumber == bookNumber);
if (result != null)
{
try
{
db.Books.Attach(book);
db.Entry(book).State = EntityState.Modified;
db.SaveChanges();
}
catch (Exception ex)
{
throw;
}
}
}
Ogni volta che provo ad aggiornare il record usando il codice sopra, sto ricevendo questo errore: -
{System.Data.Entity.Infrastructure.DbUpdateConcurrencyException: l'istruzione di aggiornamento, inserimento o eliminazione memorizzata ha interessato un numero imprevisto di righe (0). Le entità potrebbero essere state modificate o eliminate da quando le entità sono state caricate. Aggiorna l'oggetto ObjectStateManager
Stai cercando di aggiornare il record (che per me significa "modifica un valore su un record esistente e salvalo indietro"). Quindi è necessario recuperare l'oggetto, apportare una modifica e salvarlo.
using (var db = new MyContextDB())
{
var result = db.Books.SingleOrDefault(b => b.BookNumber == bookNumber);
if (result != null)
{
result.SomeValue = "Some new value";
db.SaveChanges();
}
}