DbContext连接字符串的发现

本文说的是我在测试LinqToMysql发现的问题

客户端配置在App.config中的节点  

<connectionStrings>

    <add name="new_schema_firdbEntities" connectionString="metadata=res://*/FaceEntityModel.csdl|res://*/FaceEntityModel.ssdl|res://*/FaceEntityModel.msl;provider=MySql.Data.MySqlClient;provider connection string= &quot;server=localhost;user id=root;persistsecurityinfo=True;password=;database=new_schema_firdb &quot;" providerName="System.Data.EntityClient"/>

  </connectionStrings>

其中DB连接是从EF的配置节点中直接拷贝到客户端的

我在CS端代码中用到new_schema_firdbEntities db=new new_schema_firdbEntities("连接字符串"),(这里的类new_schema_firdbEntities继承自DbContext,EF自动生成的)连接字符串如果是

string connectionString = ConfigurationManager.ConnectionStrings["new_schema_firdbEntities"].ConnectionString;这里的变量connectionString 则可以正常连接数据库;

如果连接字符串是connectionString ="metadata=res://*/FaceEntityModel.csdl|res://*/FaceEntityModel.ssdl|res://*/FaceEntityModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;persistsecurityinfo=True;password=;database=new_schema_firdb&quot;",则访问数据库会失败,会提示错误“不识别关键字server”,把人引入歧途。

抓耳挠腮,测试良久,同样的字符串,测试结果怎么会前者行得通,后者就不行呢,难道连接字符串不一样?

我调试后发现前者会把&quot;转译成\,而后者保持原样,DB构造方法生成实例时,后者连接字符串含特殊字符,导致部分字符串截断,因此会访问数据库失败。。。,真是让人蛋疼。


连接字符串记得要转译。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于您的问题,我可以回答。 在 .NET Core 中,可以通过在 appsettings.json 文件中添加一个名为 ConnectionStrings 的配置项来配置连接字符串。例如: ``` "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=MyDatabase;User Id=MyUsername;Password=MyPassword;" } ``` 然后在应用程序代码中,可以使用 IConfiguration 接口来访问连接字符串。例如: ``` public class MyDbContext : DbContext { private readonly IConfiguration _config; public MyDbContext(IConfiguration config) { _config = config; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(_config.GetConnectionString("DefaultConnection")); } } ``` 以上示例使用 SQL Server 数据库作为示例,但连接字符串的格式与使用的数据库类型有关。 ### 回答2: 在.NET Core API中配置连接字符串时,我们可以使用appsettings.json文件来存储连接字符串。以下是配置连接字符串的步骤: 1. 打开项目中的appsettings.json文件。 2. 在文件中,找到"ConnectionStrings"部分。如果没有,请自行添加以下内容: ``` "ConnectionStrings": { "DefaultConnection": "你的连接字符串" } ``` 这里,我们使用了"DefaultConnection"作为连接字符串的键,你可以根据实际情况进行更改。 3. 将你的实际连接字符串替换为"你的连接字符串"。 4. 保存并关闭appsettings.json文件。 5. 在Startup.cs文件中的ConfigureServices方法中,添加以下代码来将连接字符串配置绑定到应用程序: ``` services.AddDbContext<YourDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); ``` 这里,我们假设你正在使用Entity Framework Core的DbContext。如果你使用其他数据库提供程序,请相应地更改。 6. 在Startup.cs文件中的Configure方法中,添加以下代码来让应用程序使用连接字符串: ``` using (var scope = app.ApplicationServices.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService<YourDbContext>(); dbContext.Database.Migrate(); } ``` 这将确保在应用程序启动时,数据库迁移将根据连接字符串进行。 配置完成后,你可以使用appsettings.json中的连接字符串连接到数据库。此外,你还可以通过Configuration.GetConnectionString("DefaultConnection")方法在代码中获取连接字符串。 以上是在.NET Core API中配置连接字符串的简要步骤。根据你实际的使用情况,可能需要进行一些额外的配置或修改。 ### 回答3: 在.NET Core中配置连接字符串可以通过多种方式实现。 一种常用的方式是在appsettings.json文件中配置连接字符串。首先,在项目根目录下的appsettings.json文件中添加一个名为“ConnectionStrings”的节点,再添加一个键值对,键为数据库名称,值为连接字符串。例如: { "ConnectionStrings": { "MyDatabase": "Data Source=myserver;Initial Catalog=mydatabase;User Id=myusername;Password=mypassword;" } } 在代码中,可以使用Configuration对象来读取连接字符串。首先在程序入口处的Startup.cs文件中添加一个属性,例如: public IConfiguration Configuration { get; } 然后在ConfigureServices方法中使用Configuration对象获取连接字符串: public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MyDatabase"))); } 这样,就可以在代码中使用连接字符串连接数据库了。 除了appsettings.json,还可以使用环境变量来配置连接字符串。可以在操作系统中或者Docker容器中设置环境变量,然后使用Environment对象来读取连接字符串。例如: string connectionString = Environment.GetEnvironmentVariable("ConnectionStrings_MyDatabase"); 在以上两种方式中,都可以根据需要配置多个连接字符串,并在代码中根据名称进行获取和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值