.NetCore WebApi实战1
1、先创建文件夹Extensions,静态类ServiceExtensions,用来写拓展服务
public static class ServiceExtensions
2、先支持跨域,全部支持策略
public static void ConfigureCors(this IServiceCollection services) { services.AddCors(options => { options.AddPolicy("AnyPolicy", builder => builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader()); }); }
启动类Program类中配置
注册跨域服务
builder.Services.ConfigureCors();
指定策略名称,尽量放在前面的位置
app.UseCors("AnyPolicy");
2、创建实体类Entites文件夹
一对多的
public class Player { public Guid Id { get; set; } public string Account { get; set; } public string AccountType { get; set; } public DateTime DateCreated { get; set; } public ICollection<Character> Characters { get; set; } public Player() { DateCreated = DateTime.Now; } }
一对一的
public class Character { public Guid Id { get; set; } public string Nickname { get; set; } public string Classes { get; set; } public int Level { get; set; } public DateTime DateCreated { get; set; } public Guid PlayerId { get; set; } public Player Player { get; set; } }
3、创建Data文件夹,支持EF
视图,其它视图中打开--程序包管理控制台
在PM>中输入 Install-Package Microsoft.EntityFrameworkCore -Version 8.0.7,当出现下面提示,表示已安装成功!
安装EFMysql驱动程序
Install-Package Pomelo.EntityFrameworkCore.MySql -Version 8.0.2
双击项目查看安装包
<ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.2" /> <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.3" /> </ItemGroup>
4、Data文件夹下面创建Mappings映射关系文件夹
配置是不是唯一索引IsUnique 、最大长度HasMaxLength
public class PlayerMap : IEntityTypeConfiguration<Player> { public void Configure(EntityTypeBuilder<Player> builder) { builder.Property(player => player.Account).HasMaxLength(50); builder.Property(player => player.AccountType).HasMaxLength(10); builder.HasIndex(player => player.Account).IsUnique(); } } public class CharacterMap : IEntityTypeConfiguration<Character> { public void Configure(EntityTypeBuilder<Character> builder) { builder.Property(character => character.Nickname).HasMaxLength(20); builder.Property(character => character.Classes).HasMaxLength(20); //一对多的映射关系,外键 builder.HasIndex(character => character.Nickname).IsUnique(); builder.HasOne(c => c.Player) .WithMany(p => p.Characters) .HasForeignKey(c => c.PlayerId); } }
5、创建EFCore上下文修改映射GameManagementDbContext、
public class GameManagementDbContext : DbContext { public GameManagementDbContext(DbContextOptions<GameManagementDbContext> options) : base(options) { } public DbSet<Player> Players { get; set; } public DbSet<Character> Characters { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); //初始化种子数据 modelBuilder.Entity<Player>().HasData(DataSeed.Players); modelBuilder.Entity<Character>().HasData(DataSeed.Characters); } }
6、初始化种子数据类DataSeed
public static class DataSeed { private static readonly Guid[] _guids = { Guid.NewGuid(), Guid.NewGuid() }; public static Player[] Players { get; } = { new Player { Id = _guids[0], Account = "mw2021", AccountType = "Free", DateCreated = DateTime.Now }, new Player { Id = _guids[1], Account = "dc2021", AccountType = "Free", DateCreated = DateTime.Now } }; public static Character[] Characters { get; } = { new Character { Id = Guid.NewGuid(), Nickname = "Code Man", Classes = "Mage", Level = 99, PlayerId = _guids[0], DateCreated = DateTime.Now }, new Character { Id = Guid.NewGuid(), Nickname = "Iron Man", Classes = "Warrior", Level = 90, PlayerId = _guids[0], DateCreated = DateTime.Now }, new Character { Id = Guid.NewGuid(), Nickname = "Spider Man", Classes = "Druid", Level = 80, PlayerId = _guids[0], DateCreated = DateTime.Now }, new Character { Id = Guid.NewGuid(), Nickname = "Batman", Classes = "Death Knight", Level = 90, PlayerId = _guids[1], DateCreated = DateTime.Now }, new Character { Id = Guid.NewGuid(), Nickname = "Superman", Classes = "Paladin", Level = 99, PlayerId = _guids[1], DateCreated = DateTime.Now } }; }
7、appsettings.json配置链接字符串ConnectionStrings
"ConnectionStrings": {
"GameDb": "server=192.168.2.2;userid=root;password=123456;database=GameDb_001"
}
8、ServiceExtensions类中配置上下文链接字符串
/// <summary> /// 配置Mysql上下文 /// </summary> /// <param name="services"></param> /// <param name="config"></param> public static void ConfigureMySqlContext(this IServiceCollection services, IConfiguration config) { var connectionString = config.GetConnectionString("GameDb");//读取链接字符串 services.AddDbContext<GameManagementDbContext>( builder => builder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)));//版本号,自动获取 }
启动类配置
//配置 MySql
builder.Services.ConfigureMySqlContext(builder.Configuration);
9、安装 Install-Package Microsoft.EntityFrameworkCore.Tools -Version 8.0.7 用来迁移
10添加初始化迁移,链接要正确
Add-Migration InitialCrete
Migrations文件夹出现,迁移创建成功,必须要配置ConfigureMySqlContext,链接字符串必须正确
11、更新数据库
Update-Database
12、重新迁移
Add-Migration DataSeed
浙公网安备 33010602011771号