使用Asp.Net Core设计开发个人博客:第一阶段数据库设计
1.数据库设计
文章表(PaperTable)
变量名称 | 描述 | 类型 |
---|---|---|
ID | 唯一ID | int |
Title | 文章标题 | nvarchar(30) |
Content | 内容 | text |
Time | 创建时间 | DateTime |
PaperTypeID | 文章类型ID(考虑使用外键) | int |
Browers | 浏览量 | int |
Supports | 点赞 | int |
AuthorID | 作者ID | int |
文章类型表(PaperID)
变量名称 | 描述 | 类型 |
---|---|---|
ID | 唯一ID | int |
Name | 类型名 | nvarchar(30) |
作者表(AuthorID)
变量名称 | 描述 | 类型 |
---|---|---|
ID | 唯一ID | int |
Name | 姓名 | nvarchar(12) |
UserName | 账号 | nvarchar(16) |
UserPwd | 密码(MD5加密) | nvarchar(64) |
2.数据库开发
2.1 NuGet 安装EFCore的相关库
数据库系统 | 配置示例 | NuGet程序包 |
---|---|---|
SQLServer AzureSQL |
.UseSqlServer(connectionString) | Microsoft.EntityFrameworkCore.SqlServer |
Azure Cosmos DB | .UseCosmos(connectionString, databaseName) | Microsoft.EntityFrameworkCore.Cosmos |
SQLite | .UseSqlite(connectionString) | Microsoft.EntityFrameworkCore.Sqlite |
EFCore内存中数据库 | .UseInMemoryDatabase(databaseName) | Microsoft.EntityFrameworkCore.InMemory |
PostgreSQL* | .UseNpgsql(connectionString) | Npgsql.EntityFrameworkCore.PostgreSQL |
MySQL/MariaDB* | .UseMySql((connectionString) | Pomelo.EntityFrameworkCore.MySql |
Oracle* | .UseOracle(connectionString) | Oracle.EntityFrameworkCore |
2.2 Model库的类设计,与数据库上下文绑定在一起
2.2.1 实体属性
使用实体属性将模型类映射到列表(详见微软EFCore官方文档)
[Key]
:主键[NotMapped]
:排除特定属性[Column("xxx")]
:指定列名[Column(TypeName="nvarchar(200)")]
,[Column(TypeName = "decimal(5, 2)")]
:指定属性类型[MaxLength(500)]
:指定最大长度[required]
:属性值不可以为NULL[optional]
:属性值可以为NULL[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
非主键,自动生成键值,如日期[DatabaseGenerated(DatabaseGeneratedOption.None)]
无值生成
通用属性ID >>> 继承
1 | public class BaseId |
AuthorTable设计
1 | [ ] |
PaperTypeTable设计
1 | [ ] |
PaperTable
1 | [ ] |
DbContext 生存期、配置和初始化
步骤:
- 创建 DbContext 上下文实例
- 根据上下文实例执行CRUD操作
- 调用 SaveChanges 或 SaveChangesAsync将上述操作写入数据库中
- 释放DbContext
方法1: ASP.NET Core 依赖关系注入中的 DbContext
- 创建上下文类
ApplicationDbContext类必须公开具有DbContextOptions参数的公共构造函数。这是将 AddDbContext的上下文配置传递到DbContext的方式 1
2
3
4
5
6
7public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
} - 使用Startup.cs的ConfigureServices方法中的AddDbContext 将 EF Core 添加到此配置。
1 | public void ConfigureServices(IServiceCollection services) |
方法2: 使用”new”的简单的 DbContext 初始化
1 | public class ApplicationDbContext : DbContext |
或者通过构造函数传递 连接字符串
1 | public class ApplicationDbContext : DbContext |
在或者
1 | var contextOptions = new DbContextOptionsBuilder<ApplicationDbContext>() |
DbContext 使用
1 | public class MyController |
2.2.2 为每个Table建立通用CRUD接口库
1 | public interface IBaseRepository<TEntity> where TEntity:class,new() |
2.2.3 实现通用CRUD库
1 |