为了账号安全,请及时绑定邮箱和手机立即绑定

EF Core 3.0 手动设置连接字符串

EF Core 3.0 手动设置连接字符串

C#
四季花海 2022-08-20 17:00:09
我正在开发一个带有.NET Core和EF Core的控制台应用程序(两者都是v3.0);我需要使用从另一个类生成的字符串启动我的DbContext。DbContext 文件public Arta_LuniaDBContext() { }public Arta_LuniaDBContext(DbContextOptions<Arta_LuniaDBContext> options) : base(options) { }protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){   optionsBuilder.UseSqlServer(DataServices.ConnectionString);}数据服务类public static string ConnectionString { get { return GetConnectionData(); } }private static string GetConnectionData(){   /// Sets the Server name, Database, UserId and Password.   string Server, Database, UserId, Password;   /// Sets the separator.   string Separator = ";";   /// Connection string [internal].   string ArtaConn = null;   /// Loads Settings.xml   XmlDocument xDoc = new XmlDocument();   xDoc.Load("Settings.xml");   /// Gets the XmlNode: DataSource   XmlNodeList xSource = xDoc.GetElementsByTagName("DataSource");   for (int i = 0; i < xSource.Count; i++)   {      /// Sets the Server name.      Server = "Server=" + xSource[i].Attributes["Server"].Value + Separator;      /// Sets the Database.      Database = "Database=" + xSource[i].Attributes["Database"].Value + Separator;      /// Sets the User id.   UserId = "User id=" + xSource[i].Attributes["UserId"].Value + Separator;      /// Sets the Password.      Password = "Password=" + xSource[i].Attributes["Password"].Value + Separator;      /// Builds the connection string.      ArtaConn = Server + Database + UserId + Password;      Colorful.Console.WriteLine(ArtaConn, System.Drawing.Color.Yellow);      // I'm using this line to test the output.   }   /// Returns~   return ArtaConn;}
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

使用正确的工具完成工作 - SqlConnectionStringBuilder 类

生成器将转义反斜杠并为 Sql Server 连接构建正确的连接字符串。


var builder = new SqlConnectionStringBuilder

{

    DataSource = @"IP_ADDRESS\INSTANCE",

    InitialCatalog = "DbName",

    UserID = "MyUserId",

    Password = "MyPassword"

};


var connectionString = builder.ConnectionString;


// Use connection string

optionsBuilder.UseSqlServer(connectionString );

因此,您的方法可以如下所示:


private SqlConnectionStringBuilder BuilderFromElement(XElement source)

{

    return new SqlConnectionStringBuilder

    {

        DataSource = source.Attribute("Server")?.Value,

        InitialCatalog = source.Attribute("Database")?.Value,

        UserID = source.Attribute("UserID")?.Value,

        Password = source.Attribute("Password")?.Value

    };

}


private string GetConnectionString()

{

    var settings = XDocument.Load("Settings.xml");

    var allConnectionStrings = 

        settings.Descendants("DataSource")

                .Select(BuilderFromElement)

                .Select(builder => builder.ConnectionString)

                

    return allConnectionStrings.FirstOrDefault();

}


查看完整回答
反对 回复 2022-08-20
?
慕森王

TA贡献1777条经验 获得超3个赞

查看 xml 文件中反斜杠的用法。


在某些上下文中,可以是转义的 \,作为文字,它是 2 个斜杠。\\


此代码说明了这一点:这些字符串不相等。


        String s= "Server=IP\\INSTANCE_NAME;Database=db;User id=User ;Password=pwd;";

    String s2= @"Server=IP\\INSTANCE_NAME;Database=db;User id=User ;Password=pwd;";


    Console.WriteLine(s2== s);

如果您尝试使用localhost进行此操作,它是否按照您的期望方式工作?如果是这样:罪魁祸首是 .


您还可以查看这是否有效。


optionsBuilder.UseSqlServer(@"Server=Server=IP\\INSTANCE_NAME;Database=DB;User id=User ;Password=pwd;");

希望这有帮助!


查看完整回答
反对 回复 2022-08-20
  • 2 回答
  • 0 关注
  • 312 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信