Ich arbeite an einer ASP.NET MVC-Website und verwende Entity Framework zum Speichern/Aktualisieren von Daten in einer MySQL-Datenbank.Clear Entity Framework-Kontext für Ausnahme
ich ninject bin mit DbContext in meine Repository-Klasse zu injizieren wie unten:
public class MyRepository : IMyRepository
{
MyContext _context;
public MyRepository(MyContext context)
{
_context = context;
}
// more code ...
Dies ist, wie ich den Kontext am Injektion mit ninject:
kernel.Bind<MyContext>().ToSelf().InSingletonScope();
Und ich bin mit dem injizierten DbContext wie unten, um die Daten in meine Datenbank zu speichern:
public void InsertModel(MyModel r)
{
_context.MyModel.Add(r);
_context.SaveChanges();
}
Jetzt, Das Problem, das ich gegenüberstellen, ist, dass Entity Framework eine Ausnahme auslöst, wenn eine Ausnahme auftritt (z. B. wenn ich absichtlich ein ungültiges Modell übergebe). Die ungültige Entität bleibt im dbContext und alle weiteren save Versuche werden daher fehlschlagen.
Ich habe googeln dieses Problem und fand This Article die speichern/aktualisieren Betrieb in einem try
/catch
Block schlägt setzen. Wenn eine Ausnahme auftritt, wird empfohlen, dbContext im Block catch
zu löschen.
Ist das die richtige Appraoch? Es klingt wie eine Menge Arbeit, um eine try
/catch
um alle speichern Betrieb und löschen Sie den dbContext? Ich würde jede Hilfe bei der Erläuterung des richtigen Ansatzes zur Klärung des Kontextes zu schätzen wissen.
Ich habe das gleiche Problem wie von @Esfandiyar beschrieben, ich habe versucht, InRequestScope() zu verwenden, kann aber nicht funktionieren. Ich verwende ein generisches Repository, und mein Bindungscode lautet "kernel.Bind (typeof (IGenericRepository <>)). To (typeof (GenericRepository <>))". Aber mein Kontext wird nicht pro Anfrage zerstört. Irgendwelche Vorschläge dafür? –
Fügen Sie Ihrer ninject-Bindung InRequestScope hinzu: kernel.Bind (typeof (IGenericRepository <>)). To (typeof (GenericRepository <>)). InRequestScope() – Sarhang