C# -- EF环境配置、数据模型创建及使用

本文介绍了如何在VS2019中使用EF Core 8.0.22版本与MySQL数据库进行交互,包括创建数据模型、执行基本的CRUD操作以及关联查询。通过ADO.NET实体数据模型,详细展示了查询、新增、删除和更新的方法,并提供了内联和左外连接的查询示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境版本

EF的版本对应关系要求很严格,版本不兼容的时候在VS操作会出现无响应但是也没有任何报错的情况。
改程序在 VS2019 中创建

类型环境/组件版本
系统安装MySQL Connector Net8.0.22
系统安装MySQL for Visual Studio1.2.9
NuGet下载安装MySql.Data8.0.22
NuGet下载安装MySql.Data.EntityFramework8.0.22

创建数据模型

  • 右键项目,添加新建项,选择 ADO.NET 实体数据模型 在这里插入图片描述
  • 选择来自数据库的EF设计器
    在这里插入图片描述
  • 选择自己要用的数据库链接,并为当前数据模型设置连接名称(此处使用 qdbEntities1 ),第一次创建时,需要新建链接(输入用户名密码选择对应数据库,并给当前新建的数据库链接创建一个别名),
    在这里插入图片描述
  • 点击下一步,选择需要同步的表
    在这里插入图片描述
  • 点击完成,等待数据模型创建成功即可

增、删、改、查 的简单使用(以上面的部门表 dept为例)

查询

        /// <summary>
        /// 查询列表
        /// 以 ID 为例
        /// </summary>
        /// <param name="record"></param>
        /// <returns></returns>
        public List<dept> query(dept record)
        {
        	//实例化上面创建的数据模型
            using (qdbEntities1 myDb = new qdbEntities1())
            {
            	//实例化 IQueryable<dept> 使用LINQ语法进行SQL操作 
                IQueryable<dept> db = myDb.dept;
                if (record != null)
                {
                	 //id不为null 就按照ID查询
                    if (record.ID != null)
                    {
                        db = db.Where<dept>(p => p.ID.Equals(record.ID));
                    }
                    //...
                }
                //查询到默认的DTO(dept)
                //return db.ToList();
                //查到指定的DTO里面(自己指定对应字段、或对字段做出适当的调整)
                return db.Select(q => new dept()
                {
                    ID = q.ID,
                    NAME = q.NAME,
                }).ToList();
            }
        }

关联查询

        /// <summary>
        /// 关联查询
        /// </summary>
        /// <param name="record"></param>
        /// <returns></returns>
        public List<dept> joinQuery()
        {
            using (qdbEntities1 myDb = new qdbEntities1())
            {
                //inner join
                var result = from dept in myDb.dept
                             join role in myDb.role
                             //单字段匹配
                             //on dept.ID equals role.ROLE_ID
                             //多字段匹配
                             on new { ID= dept.ID, TEXT = dept.NAME } equals new { ID = role.ID, TEXT = role.NAME }
                             select new dept()
                             {
                                 ID = dept.ID,
                                 NAME = dept.NAME
                             };
                //left outer join 
                result = from dept in myDb.dept
                         join role in myDb.role
                         on new { ID = dept.ID, TEXT = dept.NAME } equals new { ID = role.ID, TEXT = role.NAME }
                         //左连接 右表无数据关联时候默认右表的数据为null
                         into rightRow
                         from rw in rightRow.DefaultIfEmpty()
                         select new dept()
                         {
                             ID = dept.ID,
                             NAME = dept.NAME
                         };

                return result.ToList();
            }
        }

新增

      /// <summary>
        /// 新增
        /// </summary>
        /// <param name="record"></param>
        /// <returns></returns>
        public long add(dept record)
        {
            using (qdbEntities1 myDb = new qdbEntities1())
            {
                myDb.dept.Add(record);
                return myDb.SaveChanges();
            }
        }

删除

       /// <summary>
       /// 删除
       /// </summary>
       /// <param name="record"></param>
       /// <returns></returns>
        public long delete(dept record)
        {
            //删除单个数据
            //using (qdbEntities1 con = new qdbEntities1()){
            //    查找ID为1的第一个部门并删除
            //    var modelName = con.dept.Where(e=>e.ID == 1).FirstOrDefault();
            //    con.dept.Remove(modelName);
            //    return con.SaveChanges();
            //}
            //删除多个数据
            using (qdbEntities1 con = new qdbEntities1()){
            	//查找部门名中存在管理部的并删除
                var modelName = con.dept.Where(e => e.NAME.Contains("管理部")).ToList();
                con.dept.RemoveRange(modelName);
                return con.SaveChanges();
            }
        }

修改

 /// <summary>
        /// 修改
        /// </summary>
        /// <returns></returns>
        public long update()
        {
            //查询后修改
            using (qdbEntities1 con = new qdbEntities1())
            {
                //查询ID为1的第一个部门 将部门名称修改为xx部
                var modelName = con.dept.Where(e => e.ID == 1).FirstOrDefault();
                modelName.NAME = "xx部";
                return con.SaveChanges();
            }
            //根据ID修改对象(会清空Model中不包含的属性,如下除了ID和NAME 其他字段都会被修改为空)
            using (qdbEntities1 con = new qdbEntities1()){
                dept dp = new dept()
                {
                    ID = 1,
                    NAME = "fieldValue",
                };
                //Attach:将给定实体以System.Data.EntityState.Unchanged状态附加到上下文中
                con.dept.Attach(dp);
                return con.SaveChanges();
            }
            //根据ID修改对象(不清空Model中不包含的属性)
            using (qdbEntities1 con = new qdbEntities1())
            {
                dept dp = new dept()
                {
                    ID = 1,
                    NAME = "xx部",
                };
                //设置模型状态为尚未经过修改
                con.Entry(dp).State = EntityState.Unchanged;
                //设置哪些列做了修改,EF就会生成只修改对应列的SQL语句
                con.Entry(dp).Property(p => p.NAME).IsModified = true;
                return  con.SaveChanges();
            }
        }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mingvvv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值