• 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
      在这里插入图片描述

    • 创建之后 拖拽绘制一个登录页面吧
      在这里插入图片描述

    • 安装EF Core的包
      Microsoft.EntityFrameworkCore.SqlServer:6.0.7
      Microsoft.EntityFrameworkCore.Tools:6.0.7
      如果想要连接其他数据库可以参照官网:支持的其他数据库连接
      在这里插入图片描述

    • 安装完成后
      在这里插入图片描述

    • 创建模型
      在这里插入图片描述

    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;
            }
            */
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 创建UserConfigure 用于设置数据库字段的配置
      使用的是fluent API,单独配置每一个实体的类型
      在这里插入图片描述
    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);//意义同上
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 创建TestDbContext.cs 类,用于连接数据库相关
      在这里插入图片描述
    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);
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 使用迁移命令
      在这里插入图片描述
      Add-Migration User
      解释:Add-Migration + 名称[迁移要起的名字],会生成迁移文件
      在这里插入图片描述

    Update-Database
    [在数据库生成数据表]
    在这里插入图片描述

    这样就可以访问数据库了

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

    数据库中的值

    在这里插入图片描述
    登录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("用户名密码不正确");
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 效果展示
      在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    2023.10.7 Java 创建线程的七种方法
    Python实验二:Python程序设计之结构与复用
    如何理解电商云仓出租?
    基于MATLAB的函数拟合
    Mybatis使用拦截器添加参数
    Linux:安装MySQL服务(非docker方式)
    分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测
    计算机毕业设计SSMJAVA高校田径运动会管理【附源码数据库】
    Django教程
    QT中常用文本控件区别(LineEdit、TextEdit 、PlainTextEdit )
  • 原文地址:https://blog.csdn.net/qq_40127080/article/details/126033665