2016-07-28 16 views
1

Ich versuche, eine bestehende Anwendung ohne eine app.config zu machen (es ist aufgrund einer sehr spezifischen Umgebung erforderlich). Das Problem ist, dass es stark auf EntityFramework 6 angewiesen ist, um mit einem SQL-Server zu arbeiten.EntityFramework 6 Code-basierte Konfiguration der Verbindungszeichenfolge für Datenbank-zuerst

Ich versuche eine code-based configuration zu verwenden, aber ich kann nicht herausfinden, wie man eine korrekte Verbindungszeichenfolge durch meine Konfiguration zur Verfügung stellt.

ich eine Konfigurationsklasse gemacht haben:

public class MyConfiguration : DbConfiguration 
{ 
    public MyConfiguration() 
    { 
     SetDefaultConnectionFactory(new MyConnectionFactory()); 
     SetProviderServices("System.Data.SqlClient", System.Data.Entity.SqlServer.SqlProviderServices.Instance); 
    } 
} 

Dann ist es meiner DbContext (generiert durch EF automaticaly von bd) Bereitstellen:

[DbConfigurationType(typeof(MyConfiguration))] 
public partial class TestModelEntities 
{   
} 

Mit einem benutzerdefinierten Verbindungsfactory:

public class MyConnectionFactory : IDbConnectionFactory 
{ 
    public DbConnection CreateConnection(string nameOrConnectionString) 
    { 
     var newConnStringBuilder = new SqlConnectionStringBuilder 
     { 
      UserID = "user", 
      Password = "pass", 
      InitialCatalog = "databaseName", 
      DataSource = "serverName" 
     }; 

     var entityConnectionBuilder = new EntityConnectionStringBuilder 
     { 
      Provider = "System.Data.SqlClient", 
      ProviderConnectionString = newConnStringBuilder.ToString(), 
      Metadata = @"res://*/TestModel.csdl| 
          res://*/TestModel.ssdl| 
          res://*/TestModel.msl" 
     }; 

     var newDbConnect = new EntityConnection(entityConnectionBuilder.ToString()); 
     return newDbConnect; 
    } 
} 

Jedoch. Wenn ich versuche, es zu testen, bekomme ich immer noch eine . Warum? Was vermisse ich?

Antwort

3

Sie sollten eine Verbindungszeichenfolge für Ihren Kontext über bereitstellen: base (connectionString). Erstellen Sie eine Klasse wie folgt:

public class ConnectionStringBuilder 
{ 
    public static string Construct() 
    { 
     var newConnStringBuilder = new SqlConnectionStringBuilder 
     { 
      UserID = "user", 
      Password = "pass", 
      InitialCatalog = "databaseName", 
      DataSource = "serverName" 
     }; 

     var entityConnectionBuilder = new EntityConnectionStringBuilder 
     { 
      Provider = "System.Data.SqlClient", 
      ProviderConnectionString = newConnStringBuilder.ToString(), 
      Metadata = @"res://*/TestModel.csdl| 
          res://*/TestModel.ssdl| 
          res://*/TestModel.msl" 
     }; 

     return entityConnectionBuilder.ToString(); 
    } 
} 

Dann wird Ihr Context Konstruktor ändern wie folgt aussehen:

public DbContext() 
    : base(ConnectionStringBuilder.Construct()) 
{ 
} 

Es sollte jetzt funktionieren. (source)

+0

Heh. Überraschend einfache Lösung. Vielen Dank! – user3223738

Verwandte Themen