wpf 以编程方式设置EntityFramework的ConnectionString,

fcy6dtqo  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(160)

我们有一个数据库(MySQL),例如DemoDB。我们有不同的帐户使用该数据库。因此,为每个帐户创建一个数据库,例如Account 1DB、Account 2DB。表存储过程和函数都是相同的。我们需要开发一个Web API,并提供一些用于插入和更新数据的服务。用户通过指定AccountName登录(比如从字段为“用户名”的WPF应用程序,密码和帐户组合框)。我们需要将连接字符串的初始目录设置为用户登录的帐户(实际上,我们需要在用户登录之前设置初始目录,因为我们需要根据帐户检查他的凭据)。
WPF屏幕示例:
用户名:A
密码:密码
账户:账户1
当用户点击登录时,我想做的是:
1:-〉将连接字符串中的初始目录设置为Account 1DB
2:-〉那么用户执行的所有数据库操作(包括身份验证)都应该在Account 1DB Schema上
我想采用数据库优先的方法。如何使用这种方法?
提前致谢,
阿比拉什D K

ru9i0ody

ru9i0ody1#

您可以更改从DbContext派生的类,以将connectionString作为参数并将其传递给基DbContext构造函数。

public partial class MyContext : DbContext
{
    public MyContext() : base("name=MyDbName")
    {
    }

    public MyContext(string connectionString) : base(connectionString)
    {
    }

    // Class members
}

然后您可以使用类似连接字符串工厂的命令:

public class ConnectionStringFactory
{
    public string GetConnectionString(string initialCatalog)
    {
        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
        builder.InitialCatalog = initialCatalog;

        // Set another connection parameters

        return builder.ToString();
    }
}

现在,您可以使用单独的上下文,检查凭据并执行所有数据库操作,如下所示:

ConnectionStringFactory factory = new ConnectionStringFactory();
    string connectionString = factory.GetConnectionString("Account1DB");
    MyContext context = new MyContext(connectionString);
fumotvh3

fumotvh32#

当然你可以改变,但不是首选。它可以在运行时抛出异常没有适当的消息,我质疑像这样的情况。
你的变化是这样的:

DbContext source;  // I assumed you created on

var entitysb = new EntityConnectionStringBuilder
                (System.Configuration.ConfigurationManager
                    .ConnectionStrings["EntityConnection"].ConnectionString);

var sqlsb = new SqlConnectionStringBuilder
                (entitysb.ProviderConnectionString);
source.Database.Connection.ConnectionString 
                = sqlsb.ConnectionString;

相关问题