☰分类导航

软件工程/数据库与EF Core
课程进度 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