使用 c# 更改连接字符串的实体框架

本文关键字:实体 框架 字符串 连接 使用 | 更新日期: 2023-09-27 18:33:38

我有一个应用程序,每个用户和计算机的连接字符串都会更改。 也就是说,我已经制作了一个测试连接字符串只是为了进行测试。然后,一旦它起作用,我将添加动态连接字符串。

经过一些研究,我发现连接字符串有问题。

如果有人能告诉我我错在哪里,我将不胜感激。

var s = @"metadata=res://*/ProcurementModel.csdl|res://*/ProcurementModel.ssdl|
          res://*/ProcurementModel.msl;provider=System.Data.SqlClient;
          provider connection string=&';data source=JAMES-DESKTOP'SQLEXPRESS;initial catalog=MyDatabase;persist security info=True;user id=User;password=*****;MultipleActiveResultSets=True;App=EntityFramework&';";

更新:

public ProcurementContext()
{
    var s =
            @"metadata=res://*/ProcurementModel.csdl|res://*/ProcurementModel.ssdl|
            res://*/ProcurementModel.msl;provider=System.Data.SqlClient;
            provider connection string=&';data source=JAMES-DESKTOP'SQLEXPRESS;initial catalog=MyDatabase;persist security info=True;user id=jd;password=P@ssw0rd;MultipleActiveResultSets=True;App=EntityFramework&';";
    _connectionString = s;
}

获取数据:

public List<Procurement> ParcelListByUser(string userName)
{
    using (var context = new ProcurementEntities(_connectionString))
    {
        return context.Procurements.Where(p => p.UserName == userName).ToList();
    }
}

构造 函数:

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

错误信息:

初始化字符串的格式不符合规范 从索引 165 开始。

配置:

采购的配置

public class ProcurementConfiguration:DbConfiguration
{
    public ProcurementConfiguration()
    {
        SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
        SetDefaultConnectionFactory(new SqlConnectionFactory(ConnectionStrings.LocalConnectionString));
    }
}

使用 c# 更改连接字符串的实体框架

我认为问题出在您的连接字符串中。我做了同样的事情,我有一个函数以自动方式创建连接字符串。

代码:

    public static string GetConnectionString()
    {
        // Build the provider connection string with configurable settings
        string cn = "server=" + mdlImpostazioni.p.dbServer;
        cn += ";database=" + mdlImpostazioni.p.dbName;
        cn += ";uid=" + mdlImpostazioni.p.dbUser;
        cn += ";pwd=" + mdlImpostazioni.p.dbPassword + ";";
        var providerSB = new SqlConnectionStringBuilder(cn);
        var efConnection = new EntityConnectionStringBuilder();
        // or the config file based connection without provider connection string
        efConnection.Provider = "System.Data.SqlClient";
        efConnection.ProviderConnectionString = providerSB.ConnectionString;
        // based on whether you choose to supply the app.config connection string to the constructor
        efConnection.Metadata = @"res://*";  //-----> very important
        return efConnection.ToString();
    }

通过这种方式,我将返回值传递给我的数据库上下文构造函数,就像在您的代码中一样。我的构造函数是:

public partial class Entities : DbContext
{
    public Entities(string nameOrConnectionString)
        : base(nameOrConnectionString)
    {
    }
    public void Close()
    {
        this.Dispose();
    }
}

尝试一下,问你是否有问题。

动态更改连接字符串的一种方法是仅更改实体框架基础连接的连接字符串。像这样:

myDbContext.Database.Connection.ConnectionString = "Data source=JAMES-DESKTOP'SQLEXPRESS;initial catalog=MyDatabase;persist security info=True;user id=DynamicUser;password=DynamicPassword;MultipleActiveResultSets=True;App=EntityFrameworkForUser";

这样,应用程序就不必对与实体框架(即元数据)相关的令牌进行硬编码。