课程进度 42% · 第5/10章第5/10章 · 标签 1/6
— 1 —
数据库连接字符串
原AppDbContext中的未定义Configuration已改为构造注入DbContextOptions;SQL Server依赖与连接由宿主注册。Products练习需另定义实体和DbSet。迁移命令有真实数据库副作用,必须先审查脚本、目标与备份。
连接字符串配置在 appsettings.json 中,指定数据库服务器、名称和认证信息。
连接字符串中的服务器、库名和凭据必须对应实际环境,真实密码从受控配置注入。先验证连接身份与权限,再排查实体映射和查询;把整条连接字符串打印到日志会泄露秘密,数据库错误应通过安全的追踪信息定位。
```json
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=demo;User Id=sa;Password=your_password;"
}
}
```
json
1
{
2
"ConnectionStrings": {
3
"DefaultConnection": "Server=localhost;Database=demo;User Id=sa;Password=your_password;"
4
}
5
}
!生产环境中不要硬编码密码,建议使用 User Secrets 或环境变量管理敏感信息
— 2 —
EF Core实体与上下文
Entity Framework Core 是 .NET 的 ORM 框架,通过实体类和 DbContext 操作数据库。
DbContextOptions由宿主构造并注入,上下文在合适作用域使用和释放。实体被跟踪后修改属性不等于立即写入,SaveChanges才触发保存流程。只读查询和修改查询有不同需要,不能把一个全局上下文当作所有请求共享的数据缓存。
```csharp
public class User {
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
}
public class AppDbContext : DbContext {
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
public DbSet<User> Users => Set<User>();
}
// ASP.NET Core Program.cs,需EF Core SQL Server提供程序与对应配置。
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
```
csharp
1
public class User {
2
public int Id { get; set; }
3
public string Name { get; set; }
4
public string Email { get; set; }
5
public DateTime CreatedAt { get; set; }
6
}
7
8
public class AppDbContext : DbContext {
9
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
10
public DbSet<User> Users => Set<User>();
11
}
12
13
// ASP.NET Core Program.cs,需EF Core SQL Server提供程序与对应配置。
14
builder.Services.AddDbContext<AppDbContext>(options =>
15
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
EF CoreORMDbContext实体迁移LINQ