Wie würde ich das Effort Testing Tool konfigurieren, um den DbContext von Entity Framework mit der tatsächlichen SQL server-database zu starten.

Die Anwendungsentwicklung unseres Teams beinhaltet die Verwendung von Effort Testing Tool, um den DbContext von Entity Framework zu verspotten. Allerdings scheint es, dass Effort Testing Tool muss die tatsächliche SQL server-database, die die Anwendung verwendet, um unsere Entity Framework DbContext, die scheint gegen die ordnungsgemäße Unit Testing Prinzipien zu sehen.

Der Grund dafür ist, dass wir, um den Anwendungscode zu testing, indem wir irgendetwas im Zusammenhang mit der databasekonnektivität (zB Entity Frameworks DbContext) verspotten, denn wir brauchen niemals eine database, um in Betrieb zu sein.

Wie würde ich das Effort Testing Tool konfigurieren, um den DbContext von Entity Framework mit der tatsächlichen SQL server-database zu starten.

* Update:

@ gert-arnold Wir verwenden Entity Framework Model Erste Ansatz zur Implementierung der Back-End-model und database.

Der folgende Auszug stammt aus dem Testcode:

connection = Effort.EntityConnectionFactory.CreateTransient("name=NorthwindModel"); jsAudtMppngPrvdr = new BlahBlahAuditMappingProvider(); fctry = new BlahBlahDataContext(jsAudtMppngPrvdr, connection, false); qryCtxt = new BlahBlahDataContext(connection, false); audtCtxt = new BlahBlahAuditContext(connection, false); mockedReptryCtxt = new BlahBlahDataContext(connection, false); _repository = fctry.CreateRepository<Account>(mockedReptryCtxt, null); _repositoryAccountRoleMaps = fctry.CreateRepository<AccountRoleMap>(null, _repository); 

Der "name = NorthwindModel" bezieht sich auf unsere edmx-file, die Informationen über unsere databasetabellen und deren entsprechende Beziehungen enthält.

Wenn ich den "name = NorthwindModel" lösche, indem ich die Verbindung wie die folgende Codezeile mache, bekomme ich einen Fehler, dass es ein Argument erwartet:

  connection = Effort.EntityConnectionFactory.CreateTransient(); // throws error 

Könnten Sie bitte erklären, wie der oben genannte Code umgeschrieben werden soll?

Sie brauchen nur diese Verbindungszeichenfolge, weil Effort wissen muss, wo die EDMX-file ist.

Die EDMX-file enthält alle Informationen, die für die Erstellung eines Inhouse-memorys mit einem identischen Schema erforderlich sind, das Sie in Ihrer database haben. Sie müssen nur eine Verbindungszeichenfolge angeben, weil ich dachte, es wäre praktisch, wenn der Benutzer nicht mit EDMX-Pfaden verwirren musste.

Wenn Sie die Implementierung der CreateTransient-Methode überprüfen, sehen Sie, dass es nur die Verbindungszeichenfolge verwendet, um den Metadaten-Teil davon zu erhalten.

 public static EntityConnection CreateTransient(string entityConnectionString, IDataLoader dataLoader) { var metadata = GetEffortCompatibleMetadataWorkspace(ref entityConnectionString); var connection = DbConnectionFactory.CreateTransient(dataLoader); return CreateEntityConnection(metadata, connection); } private static MetadataWorkspace GetEffortCompatibleMetadataWorkspace(ref string entityConnectionString) { entityConnectionString = GetFullEntityConnectionString(entityConnectionString); var connectionStringBuilder = new EntityConnectionStringBuilder(entityConnectionString); return MetadataWorkspaceStore.GetMetadataWorkspace( connectionStringBuilder.Metadata, metadata => MetadataWorkspaceHelper.Rewrite( metadata, EffortProviderConfiguration.ProviderInvariantName, EffortProviderManifestTokens.Version1)); }