2017-04-19 3 views
0

Ich versuche ein mehrschichtiges MVC-Projekt zu erstellen, aber ich habe ein UPDATE-Problem in EF. Ich erhalte den folgenden Fehler.EF, Update funktioniert nicht, es heißt, Entitäten wurden möglicherweise geändert oder gelöscht, seit Entitäten geladen wurden.

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. 

Ich habe DAL und BusinessLayer. In DAL, habe ich den folgenden Code für UPDATE

public void Update(params T[] entities) 
{ 
    using (var context = new BorselDBEntities()) 
    { 
     foreach (T entity in entities) 
     { 
      context.Entry(entity).State = EntityState.Modified; 
     } 
     context.SaveChanges(); 
    } 
} 

und das ist, wie ich die DAL von BusinessLayer

nennen
public void UpdateProduct(params Product[] products) 
{ 
    _productRepository.Update(products); 
} 

Warum erhalte ich den Fehler oben und was könnte ich tun, um es zu beheben?

+0

können Sie einen Haltepunkt setzen und die Einheit-ID hat überprüfen? – Usman

Antwort

1

Ein häufiger Grund ist, dass context.Entry (entity) die Entität nicht abrufen kann, die Sie aktualisieren möchten.

Wenn Sie debuggen, sehen Sie, ob context.Entry (entity) die Entität zurückgibt; leicht getan, indem es in einer separaten Zeile setzen und einen Haltepunkt afer Einstellung:

public void Update(params T[] entities) 
{ 
    using (var context = new BorselDBEntities()) 
    { 
     foreach (T entity in entities) 
     { 
      var myEntity = context.Entry(entity); 
      myEntity.State = EntityState.Modified; 
     } 
     context.SaveChanges(); 
    } 
} 

Wenn es nicht ist, müssen Sie zurück durch den Code arbeiten und arbeitet heraus, warum es nicht in der Lage ist, um ihn abzuholen. Dies liegt oft daran, dass die Identität/Primärschlüsselspalte nicht auf "Entität" gesetzt ist.

z. in einer MVC-Anwendung, wenn Sie eine Edit/Update Form haben, denken Sie daran einen ist es

@Html.HiddenFor(model => model.Id) 
+0

danke für die Hilfe. Ich habe versucht, wie Sie sagten und context.Entry (Entität) das Objekt wie erwartet zurückgeben. Was sollte ich noch überprüfen? –

Verwandte Themen