Integration Testing mit Entity Framework code first mit in-memory-Datenbank

Ich würde gerne die tatsächlichen integration tests meiner EF4.1 repositories gegen eine in-memory-Datenbank a la ayende die nhibernate-version.

Habe ich einen code-first-Modell, gegen eine legacy-Datenbank (alte Tabellen-und Spaltennamen müssen mapping auf meine entites verwenden von code-Konfigurationen).

Ich würde gerne in der Lage sein zu verwenden, Sqlite (oder andere):

  1. Generieren eines in-memory-Datenbank von meinem Modell
  2. Erstellen Sie eine DBContext für mein Modell mit dieser in-memory-Datenbank
  3. Ich habe bereits IoC/DI von einem IDBContextFactory die wird konstruiert, mit meinem (Generic) - Archive (auch mit einem GenericRepository Muster)

Gibt es bits und bobs auf-Linie, die nahelegen, dass es möglich sein sollte, aber nicht viel für den code-first-Ansätze. Wer weiß, ob dieses möglich ist?

Einige Ausschnitte meiner test-Bibliothek finden Sie unter //THROWS ERROR Kennzeichnung runtime-Fehler:

public class MyDbContextFactory : IDbContextFactory
  {
    private static object context;
    public object CurrentContext
    {
      get {
        if(context == null)
        {
          // ?? DOESN'T WORK AS THERE'S NO META DATA
          var connBuilder = new EntityConnectionStringBuilder();
          connBuilder.Provider = "System.Data.SQLite";
          connBuilder.Metadata = 
           @"res://*/TestEfDb.csdl|res://*/TestEfDb.ssdl|res://*/TestEfDb.msl";
          connBuilder.ProviderConnectionString = 
           ConfigurationManager.ConnectionStrings["DataContext"].Name;

          var entConnection = new EntityConnection(connBuilder.ConnectionString);

          // THROWS ERROR: sqlite Format of the initialization string does not
          // conform to specification starting at index 0
          // for connection string "Data Source=:memory:;Version=3;New=True;"

          //var entConnection = new EntityConnection
          // (ConfigurationManager.ConnectionStrings["DataContext"].Name);
          context = new MyDbContext(entConnection);
        }
        return context;
      }
    }
  }

...

 [Test]
    public void test_me()
    {
        var auditRespository = new AuditRepository(new MyDbContextFactory());
        auditRespository.GetAll<Audit>();
    }
  • Mehrmals erwähnt Sie die erste code, aber in der gleichen Zeit, die Sie bauen entity connection-string verweisen auf die Ressource-Dateien aus der EDMX-Datei (designer -) also, welche Art von Ansatz verwenden Sie?
  • Zitat: "?? FUNKTIONIERT NICHT, WIE THERES KEINE META-DATEN" seinen ersten code
Schreibe einen Kommentar