Ich habe eine Datenbank mit PostgreSQL bauen, die ich durch Entity Framework zugreifen 6.außerhalb der app.config eine Connection für eine PostgreSQL-Datenbank in Entity Framework Set
Bis vor kurzem es glatt durch eine app.config
Connection lief:
<connectionStrings>
<add
name="fancyName"
connectionString="Host=localhost; user id=allCanSee; password=notSoSecret; database=notHidden"
providerName="Npgsql" />
</connectionStrings>
Unser führender Programmierer ist nicht glücklich über einen offenen connectionString, da jeder Computer, auf dem wir die Software installieren, es lesen kann. Wir haben daher alles verschlüsselt und die Verschlüsselung im app.config
gespeichert.
Jetzt habe ich ein neues Problem - ich meine Datenbank die folgende Art und Weise zugegriffen haben:
public class VersionContext
{
public virtual DbSet<DatabaseNumber> DatabaseVersion { get; set; }
public VersionContext() : base("name=fancyName")
{
System.Data.Entity.Database.SetInitializer<DatabaseContext>(null);
}
}
Aber da meine app.config
nicht mehr die Connectionstring enthält, muss ich die Datenbank sagen, wo zu suchen.
Mein aktueller Versuch ist so etwas wie dieses:
public static class VersionContextConnection
{
public static string GetConnectionString() //Accessable form everywhere
{
var providerName = "Npgsql";
var databaseName = decryptedName;
var userName = decryptedUserName;
var password = decryptedPassword;
var host = decryptedHostName
var port = 5432;
return $"Provider={providerName}; " + $"Server={host}; " + $"Port={port}; " +
$"User Id={userName}; " + $"Password={password}; " + $"Database={databaseName};";
}
}
public class VersionContext : DbContext
{
public virtual DbSet<DatabaseNumber> DatabaseVersion { get; set; }
public VersionContext() : base(VersionContextConnection.GetConnectionString())
{
System.Data.Entity.Database.SetInitializer<DatabaseContext>(null);
}
}
Dann würde ich es wie folgt zugreifen:
using (var context = new VersionContext())
{
var entry = context.DatabaseVersion.FirstOrDefault();
...
}
Aber das gibt eine Ausnahme von System.Data
sagen Keyword not supported: 'provider'.
provider
Entfernen von der connectionString gibt eine weitere Ausnahme: Keyword not supported: 'port'.
port
aus der Connection Entfernen gibt eine dritte Ausnahme von .Net SqlClient Data Provider
: Login failed for user 'secretSecret'.
So - wie richte ich meine Connection, wenn es durch die :base(connectionString)
Eigenschaft nicht festgelegt ist?
Was ist mit der Einstellung zur Laufzeit? etwas wie das? http://stackoverflow.com/questions/360024/how-do-i-set-a-connection-string-config-programatical-in-net – Forlani
@ Forlani Das ist eine Lösung, aber dann das Passwort und Benutzername würde ausgesetzt werden zur Laufzeit ... –