Frage

Ist es akzeptabel, dies zu tun? Versuchen Sie zuerst das Element an das Add. Wenn das Add ausfällt, spielt es keine Rolle, weil das bedeutet, dass das Unternehmen bereits vorhanden ist?

Oder gibt es eine elegantere / einfache Lösung?

EntityFrameworkEntities dal = EntityDataModelHelper.GetEntityDataModel();

try
{
    dal.AddToXXXXXX(xxxxxxx);
}
catch
{

}

try
{
    dal.SaveChanges();
    return true;
}
catch
{
    return false;
}

OK I verkürzt es ...

EntityFrameworkEntities dal = EntityDataModelHelper.GetEntityDataModel();

if(xxxxxxx.ID == 0)
{
    dal.AddToXXXXXX(xxxxxxx);
}

try
{
    dal.SaveChanges();
    return true;
}
catch
{
    return false;
}
War es hilfreich?

Lösung

Es ist sicher nicht OK, dies zu tun. Eine Fang-Anweisung ohne Typen in C # bedeutet „jeden Standard fängt oder Nicht-Standard-Ausnahme“. Aber du bist Absicht ist ein Duplikat hinzufügen zu verhindern. Addiert kann für eine Vielzahl von Gründen fehlschlagen, die kein Hinweis auf einen vorhandenen Eintrag sind. Zum Beispiel könnte das Verfahren eine Nullreferenz werfen, und Sie würden annehmen, dass es aufgenommen.

Wenn Sie ein Duplikat überprüfen möchten hinzufügen, können Sie muss Fang nur die Ausnahme, die ein Duplikat Add geworfen wird.

Andere Tipps

Sie wollen mit einer IfExists Stil Methode zu starten, und dann überspringen die Änderungen zu speichern, wenn Sie tatsächlich Änderungen haben.

Wie von Lucas bemerkt, try-catch-Blöcke haben einen großen Overhead, wenn Sie in den catch-Block fallen, so der Regel wollen Sie nicht auf das verlassen, es sei denn, es keine Möglichkeit besteht darin, zu bestimmen, ob das Objekt bereits vorhanden ist.

Sie keinen try-catch verwenden eine if-Anweisung des Job zu erledigen. Try-Catch ist für ungewöhnliche unerwartete Ereignisse.

Bearbeiten In Ihrem aktualisierten Code, scheitern Sie eine Ausnahme zu fangen, die von der „AddToXXXXXX“ Methode ausgelöst werden würden.

Sie sollten tun

If(!XXXXXX.Contains(newItemValue))
{
   try
   {
      add...
      savechanges...
   }
   catch
   {

   }
}

Alternativ können Sie das Hinzufügen und Savechanges in verschiedene Try-Catch-Blöcke trennen, aber das ist nur notwendig, wenn Savechanges selbst ausgeführt wird, wenn Hinzufügen fehlschlägt.

Sie könnten den ersten Try-Catch mit einer If-Anweisung ersetzen, ich glaube, Sie werden immer noch, obwohl die zweite wollen.

Bearbeiten: Es ist auch nicht nur empfohlen, alle Ausnahmen in einem Block zu fangen, ohne Rücksicht auf das, was sie sind.

P. S. Versuchen Sie Catch-Blöcke verwenden mehr Rechenleistung (Zeit) als If-Anweisungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top