2009-07-16 14 views
3

Also das ist, was ich bisher habe. Mache ich etwas falsch oder gibt es einen Bug in 3.0.0.3?Subsonic 3 Simple Repository und Transaktionen

var Repository = new SimpleRepository("DBConnectionName"); 

    using (TransactionScope ts = new TransactionScope()) 
    { 
     using (SharedDbConnectionScope scs = new SharedDbConnectionScope("connstring", "providerName")) 
     { 
      try 
      { 
       for (int i = 0; i < 5; i++) 
       { 
        Supplier s = new Supplier(); 
        s.SupplierCode = i.ToString(); 
        s.SupplierName = i.ToString(); 

        Repository.Add<Supplier>(s); 
       } 

       ts.Complete(); 
      } 
      catch 
      { 
      } 
     } 
    } 

Ich erhalte einen Fehler in SubSonic DbDataProvider öffentlichen DbConnection CurrentSharedConnection { get {return __sharedConnection; }

 protected set 
     { 
      if(value == null) 
      { 
       __sharedConnection.Dispose(); 

etc .. __sharedConnection == null :(Objekt Null Ausnahme Referenz :(

Antwort

0

Schließlich löste dies für mich. All der oben genannte Code funktioniert nicht für mich (SubSonic 3.0.0.3, mit SQLite), aber das Hinzufügen BeginTransaction() verursacht, dass es wie erwartet funktioniert, was die Transaktion erheblich beschleunigt und die Updates rückgängig macht, wenn irgendwelche Ausnahmen auftreten.

using (SharedDbConnectionScope sharedConnectionScope = new SharedDbConnectionScope(Access.Provider)) 
{ 
    using (IDbTransaction ts = sharedConnectionScope.CurrentConnection.BeginTransaction()) 
    { 
     IRepository repo = new SimpleRepository(Access.Provider); 
     //Do your database updates 

     //throw new ApplicationException("Uncomment this and see if the updates get rolled back"); 
     ts.Commit(); 
    } 
} 

Der Vollständigkeit halber: Access.Provider ist eine statische Eigenschaft in einer für mich Hilfsklasse, die return SubSonic.DataProviders.ProviderFactory.GetProvider(ConnectionString, "System.Data.SQLite");

zurück
0

Vielleicht die SharedDbConnectionScope und Transactionschalt helfen kann um.

using (SharedDbConnectionScope scs = new SharedDbConnectionScope("connstring", "providerName")) 
{ 
    using (TransactionScope ts = new TransactionScope()) 
    { 
    } 
} 
0

Dies, wenn Migration passieren wird ist gesetzt - Bei Tablemigration wird die dbconnection geschlossen

Probieren Sie das SimpleRepository mit SimpleRepositoryOption aus an keiner.

Ich weiß nicht, ob das ein Fehler ist. Ich denke, die Transaktionen funktionieren nicht mit SimpleRepository, ich habe immer die Hälfte der Daten gespeichert, wenn eine Ausnahme in der Transaktion ausgelöst wird ... vielleicht ist es nur für ActiveRecord? Jeder weiß es?