Я работаю над программным установлением соединения с PostgresSQL с использованием Entity Framework 6. У меня есть этот класс:
public class ClearspanDatabaseContext : DbContext
с этим конструктором:
public ClearspanDatabaseContext()
: base(buildConnectionString())
{
}
Здесь статический метод, который делает программную цепочку соединений:
private static string buildConnectionString()
{
RegisterDbProvider("Npgsql", ".Net Framework Data Provider for Postgresql", "Npgsql Data Provider", "Npgsql.NpgsqlFactory, Npgsql");
EntityConnectionStringBuilder entityConnectionStringBuilder = new EntityConnectionStringBuilder();
entityConnectionStringBuilder.Provider = "Npgsql";
entityConnectionStringBuilder.ProviderConnectionString = "host=192.168.168.140;Port=5432;username=ClearspanDevLogin;password=*******;database=ClearspanWebServerDev";
return entityConnectionStringBuilder.ToString();
}
И вот метод, который регистрирует Npgsql в качестве поставщика базы данных, взятый из этого source:
public static bool RegisterDbProvider(string invariant, string description, string name, string type)
{
try
{
DataSet ds = ConfigurationManager.GetSection("system.data") as DataSet;
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["InvariantName"].ToString() == invariant)
{
return true;
}
}
ds.Tables[0].Rows.Add(name, description, invariant, type);
return true;
}
catch
{
}
return false;
}
Это создает такую строку:
"provider=Npgsql;provider connection string=\"host=192.168.168.140;Port=5432;username=ClearspanDevLogin;password=********;database=ClearspanWebServerDev\""
Но я получаю ArgumentException
:
Ключевое слово не поддерживается: "поставщик".
Я думаю, что я близок к программному соединению, но мне не хватает чего-то маленького. Что я могу сделать для устранения этого исключения и правильно настроить это соединение программно? Нет ответов app.config, я работаю в библиотеке классов, которая игнорирует app.config(см. Комментарии принятого ответа на этот question). Эта программа должна оставаться такой, потому что она используется как плагин - она не работает (и не должна) запускаться сама по себе. Спасибо заранее.