winfrom .net 6使用EF Core,使用的是Code First代码先行

前言

EF Core 主力是做web端,webMVC、web API。也支持应用程序,不过在未来的企业更新升级换代比较快,每次更新的话桌面程序还需要重新部署,也是比较费劲。

推荐

给大家推荐一个.net的学习视频,讲的挺好的,前提是有一定的C#语法基础
.net core 6.0视频

本机环境

IDE:vs 2022
数据库:vs自带SQL Server数据库
.net 版本:.net 6.0

步骤

  • 创建winfrom项目
    注意不是.net Framework
    winfrom .net 6使用EF Core,使用的是Code First代码先行_第1张图片

  • 创建之后 拖拽绘制一个登录页面吧
    winfrom .net 6使用EF Core,使用的是Code First代码先行_第2张图片

  • 安装EF Core的包
    Microsoft.EntityFrameworkCore.SqlServer:6.0.7
    Microsoft.EntityFrameworkCore.Tools:6.0.7
    如果想要连接其他数据库可以参照官网:支持的其他数据库连接
    winfrom .net 6使用EF Core,使用的是Code First代码先行_第3张图片

  • 安装完成后
    winfrom .net 6使用EF Core,使用的是Code First代码先行_第4张图片

  • 创建模型
    winfrom .net 6使用EF Core,使用的是Code First代码先行_第5张图片

using System.Text;
using System.Threading.Tasks;

namespace 多用户管理系统.Model
{
    internal class User
    {
    	#?  表示值可为空,如果不标记的话,会警告,除非在构造函数中赋值
        public int Id { get; set; }
        public string? UserName { get; set; }
        public string? PassWord { get; set; }
		
		/*
		public User(int id, string userName, string passWord)
        {
            Id = id;
            UserName = userName;
            PassWord = passWord;
        }
        */
    }
}
  • 创建UserConfigure 用于设置数据库字段的配置
    使用的是fluent API,单独配置每一个实体的类型
    winfrom .net 6使用EF Core,使用的是Code First代码先行_第6张图片
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 多用户管理系统.Model
{
    internal class UserConfigure : IEntityTypeConfiguration<User>
    {
        public void Configure(EntityTypeBuilder<User> builder)
        {
            builder.ToTable("T_User"); //设置表名
            builder.HasKey(x => x.Id);//设置为主键
            builder.Property(a => a.Id).IsRequired().IsUnicode();//设置不为空,且编码格式为Unicod
            builder.Property(a => a.UserName).IsUnicode().HasMaxLength(30);//设置编码格式与最大长度为30
            builder.Property(a => a.PassWord).IsUnicode().HasMaxLength(30);//意义同上
        }
    }
}

  • 创建TestDbContext.cs 类,用于连接数据库相关
    winfrom .net 6使用EF Core,使用的是Code First代码先行_第7张图片
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 多用户管理系统.Model;

namespace 多用户管理系统
{
    internal class TestDbContext: DbContext
    {
        public DbSet<User> Users { get; set; }//用户绑定实体类

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string connStr = "Server=Chinese_PRC_CI_AS.;Database=demo1;Trusted_Connection=True";//数据库连接字符串
            optionsBuilder.UseSqlServer(connStr);//连接数据库

        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
        }
    }
}

  • 使用迁移命令
    winfrom .net 6使用EF Core,使用的是Code First代码先行_第8张图片
    Add-Migration User
    解释:Add-Migration + 名称[迁移要起的名字],会生成迁移文件
    winfrom .net 6使用EF Core,使用的是Code First代码先行_第9张图片

Update-Database
[在数据库生成数据表]
winfrom .net 6使用EF Core,使用的是Code First代码先行_第10张图片

这样就可以访问数据库了

  • login登录判断
    对数据库有两种方式设置初始数据,1.直接连接数据库,存放数据。2.设置种子数据,3.直接在数据库初始化

数据库中的值

winfrom .net 6使用EF Core,使用的是Code First代码先行_第11张图片
登录button按钮事件

private void button2_Click(object sender, EventArgs e)
{
    //
    if (textBox1.Text == "" || textBox1.Text == "")
    {
        MessageBox.Show("用户名或账号不能为空");
    }
    else
    {
        using (TestDbContext ctx = new TestDbContext())
        {
            var user = ctx.Users.FirstOrDefault(u => u.UserName == textBox1.Text && u.PassWord == textBox2.Text);//按照条件查找数据,找到就返回第一条数据,没有找到就返回为空
            if (user != null)
            {
                MessageBox.Show("登录成功");
            }
            else
            {
                MessageBox.Show("用户名密码不正确");
            }
        }
    }
}
  • 效果展示
    winfrom .net 6使用EF Core,使用的是Code First代码先行_第12张图片

winfrom .net 6使用EF Core,使用的是Code First代码先行_第13张图片

你可能感兴趣的:(.net,core,C#,.net,.netcore)