.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
            }
        };
    }
View Code

 

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

 

posted on 2025-03-09 20:51  张彦山  阅读(32)  评论(0)    收藏  举报