Ich versuche, die ausgelöste Ausnahme zu erfassen, wenn ich einen bereits vorhandenen Benutzer mit dem angegebenen Benutzernamen in meine Datenbank einfüge. Wie der Titel sagt, verwende ich EF. Die einzige Ausnahme, die ausgelöst wird, wenn ich versuche, den Benutzer in db einzufügen, ist eine "UpdateException" - Wie kann ich diese Ausnahme extrahieren, um festzustellen, ob es eine doppelte Ausnahme oder etwas anderes ist?Doppelte Schlüsselausnahme von Entity Framework?
Antwort
catch (UpdateException ex)
{
SqlException innerException = ex.InnerException as SqlException;
if (innerException != null && innerException.Number == ??????)
{
// handle exception here..
}
else
{
throw;
}
}
die richtige Anzahl an ??????
Setzen, die eindeutige Einschränkung Verletzung entspricht (ich weiß nicht, es aus der Spitze von meinem Kopf).
Perfekt :) - Aber .. Ich habe gerade versucht, den ErrorCode abzufangen, und es sagt, dass der Fehlercode für einen doppelten Eintrag -2146232060 ist, der mir ein bisschen seltsam erscheint? – ebb
Mein schlechter .. benutzter errorCode stattdessen. Danke :) – ebb
Für zukünftige Referenz: [2601] (http://msdn.microsoft.com/en-us/library/aa258747 (v = sql.80) .aspx) ist eine eindeutige Einschränkung der Einschränkung (für SQL Server). – kamranicus
Jetzt in C# 6.0 sollten Sie, so etwas tun können:
catch (UpdateException ex) when ((ex.InnerException as SqlException)?.Number == ??????)
{
// Handle exception here
}
Weil ich EntityFramework mit C# bin mit, hatte ich eine kleine Änderung, dies zu machen - hoffen, dass es jemand hilft ..
.try
{
await db.SaveChangesAsync();
}
catch (DbUpdateException ex)
{
SqlException innerException = ex.InnerException.InnerException as SqlException;
if (innerException != null && (innerException.Number == 2627 || innerException.Number == 2601))
{
//your handling stuff
}
else
{
throw;
}
}
Mein Problem kam zustande, weil ich brauchte DbUpdateException statt UpdateException, und mein Objekt hatte Innerexception ein zusätzliches Innerexception-Objekt, das die Nummer enthielt ich brauchte ...
Danke, das war hilfreich! Ich werde das verwenden, aber mit einem zusätzlichen Null-Check in Zeile 7; Wie beschrieben, wird der catch-Block eine NullReferenceException auslösen, wenn ex.InnerException (d. h. die erste verschachtelte InnerException) null ist. –
Ich denke, es ist besser, wenn Sie verhindern, dass die Ausnahme auftritt. Wenn es mit Ihrem Code möglich ist, würde ich Folgendes tun:
Bei der Verwendung von Entity-Framework ist die beste Sache zu tun, zuerst zu versuchen und den Eintrag, der Ihnen den Ärger mit LINQs SingleOrDefault verursacht. Jetzt können Sie die erhaltene Entity mit der Instanz aktualisieren, die Sie einfügen möchten, und erhalten eine ID-Nummer mit Auto-Inkrement, wenn Sie sie verwenden. Wenn SingleOrDefault null ist, können Sie Ihre Entität sicher hinzufügen.
Beispiel Code:
public override void AddOrUpdate(CustomCaseSearchCriteria entity)
{
var duplicateEntityCheck = GetSingleByUniqueConstraint(entity.UserCode, entity.FilterName);
if (duplicateEntityCheck != null)
{
duplicateEntityCheck.Overwrite(entity);
base.Update(duplicateEntityCheck);
}
else
base.Add(entity);
}
public virtual CustomCaseSearchCriteria GetSingleByUniqueConstraint(string userCode, string filterName)
{
return GetAllInternal().SingleOrDefault(sc => sc.UserCode == userCode && sc.FilterName == filterName);
}
- 1. Benötigen mit Liste doppelte Datensätze in Entity Framework einfügen
- 2. Leistung von Entity Framework
- 3. Wie Sie doppelte Datensätze in Entity Framework einfügen
- 4. Entity Framework-Code Erste AddOrUpdate Methode Einsatz Doppelte Werte
- 5. Ignorieren Sie doppelte Schlüssel einfügen mit Entity Framework
- 6. Entity Framework: Doppelte Datensätze in Viele-zu-Viele-Beziehung
- 7. Entity Framework Spalten-Entity-Korrelation?
- 8. WCF-Verträge von Entity Framework?
- 9. Entity Framework 7 Gruppe von
- 10. Entity-Framework: Leben von DataContext?
- 11. Provider-Verbindungszeichenfolge von Entity Framework
- 12. Entity Framework-Verbindungszeichenfolge von .udl
- 13. Verwendung von Entity Framework resource.dlls
- 14. Entity Framework Update Navigation Entity
- 15. Entity-Framework und Exists-Klausel
- 16. Entity Framework: Äquivalent von INSERT OR IGNORE
- 17. Entity Framework-Seed nicht aufgerufen
- 18. Analysieren von Abfragen von Entity Framework
- 19. Entity Framework und Kopplung
- 20. Entity-Framework POCO
- 21. Entity Framework komplexe Beziehung
- 22. Entity Framework Object Verwertungen
- 23. Winforms Entity Framework
- 24. Mocking Entity Framework Kontext
- 25. Entity Framework Baumstruktur
- 26. Entity Framework + SQLite-Bereitstellung
- 27. Entity Framework OfType()
- 28. Entity Framework Standardwert SYSDATETIMEOFFSET
- 29. Entity Framework und Oracle
- 30. Lernen des Entity Framework
wie bei jeder Ausnahme, Blick auf die Innerexception die genauen Fehlerdetails zu erfahren. – RPM1984