| 

.NET C# Java Javascript Exception

0
Folgendes Problem:
Eine Spalte auf der Datenbank hat einen Integer als Datentyp und einen eindeutigen Index.

Mein Wert den ich hier speichern wollte, generierte ich mir über die RandomKlasse. Wenn ich einen Datensatz speichern wollte, ging es manchmal, manchmal nicht. Ich vermutete hier ein Zeitproblem, dem war aber nicht so, weil alles synchron abläuft.

Ich konnte den Fehler erst nicht ermitteln, weil mir das Entity Framework keine richtige SQL Exception geworfen hat.

Ich bin dann aber dennoch auf das Problem gestossen, weil ich sich der generierte Wert zufällig wiederholte und das Entity Framework so einen doppelten Wert, der ja laut Index nicht erlaubt war, speichern wollte.

Meine Frage an dieser Stelle nun, wie kann ich solche Fehler, die eindeutig vom SQLer kommen, anständig werfen? Über die System.InvalidOperationException-Klasse habe ich leider nicht brauchbares gefunden.
24.05.2010
Mario Priebe 6,0k 3 9
1
kannst du die Exception mal posten?
Schau auch mal in die InnerException dort versteckt sich beim EF oft die SQL-Exception.
schulz3000 24.05.2010
Das Problem war eben nur, dass wenn ich mich an NUnit-Prozess gehangen habe um zu debuggen, trat der Fehler nicht auf, darum dachte ich Anfangs es wäre ein Zeitproblem. Nun aber wo ich weiss, wo der Hase begraben liegt, kann ich das doppelte Speichern reproduzieren und dann auch richtig debuggen, wo Du natürlich völlig recht hast, hier steckt dann auch eine korrekte InnerException. Ich danke Dir!

{"Eine Zeile mit doppeltem Schlüssel kann in das 'dbo.***'-Objekt mit dem eindeutigen 'UQ_***ID'-Index nicht eingefügt werden.\r\nDie Anweisung wurde beendet."}
Mario Priebe 26.05.2010
1 Antwort
0
Wenn es nur um das 'werfen' der Exceptions geht, dann definier Dir doch einfach eine eigene Klasse:
public class DuplicateIndexException: Exception { }
//....
try{
// DB code hier
}catch(Exception ex){ throw new DuplicateIndexException(); }

Natürlich kannst und solltest Du nicht komplett Exception fangen, sonder nur diejenigen, die beim Erstellen eines doppelten Indexes auftreten. Und ebenso natürlich sollte Deine eigene Exception Klasse schon ein paar mehr Infos enthalten, die dann per Konstruktor zu setzten wären.
24.05.2010
DaSpors 4,2k 2 8
Hmm, nein ich bekomme eben DAS es ein doppelte Indices Fehler ist, nicht vom SQLer zurück. Da nützt auch die abgeleitete Exception-Klasse nichts : (
Mario Priebe 24.05.2010

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH