编辑
好的,让我改进我的答案(记住我这样做是为了在同一个应用程序中遇到两个不同的数据库,在你的情况下它将是同一个数据库)
如果您尝试与同一数据库中的不同用户连接以仅访问该用户可以访问的内容,则必须放置不同的连接字符串
所以你应该使用一些东西来确定使用哪个,在我的情况下,我在我的设置文件中使用了一个变量,如下所示:
public class MyDbContext: DbContext
{
#region ..:: Fields ::..
private static readonly string DataBaseContext = ConfigurationManager.AppSettings["DataBaseContext"];
#endregion
#region ..:: Construtor ::..
public MyDbContext()
: base(DataBaseContext)
{
//Database.CreateIfNotExists();
}
#endregion
..........
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
........
}
}
现在OnModelCreating 示例
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
#region ..:: Definições ::..
var tipoBancoDados = ConfigurationManager.AppSettings["TipoBancoDados"];
var mySchema = ConfigurationManager.AppSettings["mySchema"];
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.HasDefaultSchema(tipoBancoDados.Contains("PostgreSql") ? "public" : "dbo");
//modelBuilder.HasDefaultSchema(mySchema);
#endregion
.....
}
在选择要使用的数据库类型(PostgreSql 或 SqlServer)时对我有用
您的DataBaseContext 变量必须包含要使用的连接的名称,根据您的要求
<connectionStrings>
<add name="PgSqlAdmin" connectionString="SERVER=X.X.X.X;UID=postgres;PWD=PGPASSOWRD;PORT=5432;DATABASE=mydatabase;" providerName="Npgsql" />
<add name="PgSqlUserA" connectionString="SERVER=X.X.X.X;UID=UserA;PWD=PGPASSOWRD;PORT=5432;DATABASE=mydatabase;" providerName="Npgsql" />
<add name="RemoteDb" connectionString="Data Source=X.X.X.X;Initial Catalog=MyDataBase;MultipleActiveResultSets=True;User Id=sa;Password=SqlServerPassword" providerName="System.Data.SqlClient" />
</connectionStrings>
看到我在连接字符串中放置了两个 PostgreSql 条目,一个用于 postgres 用户,一个用于 UserA
我不知道这是否能解决你的问题,但它确实可以在同一个应用程序中选择 PostgreSql 和 SqlServer,只需通知 app.Config(或 Web.Config)将使用哪个连接以及哪种数据类型
<appSettings>
<!--Usar: PostgreSql | SqlServer -->
<add key="TipoBancoDados" value="PostgreSql" />
<add key="DataBaseContext" value="PgSqlAdmin" />
</appSettings>