福衢寿车宗旨的CRUD成效

在第大器晚成篇的底子上,本文首要讲明基于EntityFramework 及SqlServer二零一二达成宗旨的CRUD功用。

风姿浪漫、设计录入分界面

始建叁个录入Form,用来管理UserAccount数据。

1.在档案的次序文件上右键,接收Add->New Item..

图片 1

2.采纳Windows 窗体 模板,将名字改为UserFrm.cs,点“Add”。

3.加多如下输入框

图片 2

二、保存操作

/// <summary>
        /// 新增数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Btn_Save_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                UserAccout userAccout = new UserAccout();
                userAccout.FirstName = this.FirstNameTxt.Text;
                userAccout.LastName = this.LastNameTxt.Text;
                userAccout.AuditFileds.UpdateDate = DateTime.Now;
                userAccout.AuditFileds.InsertDate = DateTime.Now;
                db.UserAccoutSet.Add(userAccout); 
                db.SaveChanges();
                MessageBox.Show("保存成功!");
            }
        }

 

二、履新数据**

EF的换代自身领悟的主意有如下三种(可能还会有别的的秘技卡塔尔

【代码如下】

措施大器晚成、独有FirstName的值会修正,很鲜明假设字段比超多,各个字段都遍历赋值是或不是改进,展现不是很有益于,故不建议利用,如果是运用框架模板其它说吧。

办法二、唯有InsertDate
的值不会被涂改,别的的字段都会被涂改,假设字段比很多,表面上看起来比较便利(只要设置不要改变的列就行了卡塔 尔(阿拉伯语:قطر‎,测验进程中也意识弊端,如若实体中有不足为空字段,且不再解除不保留的列的界定内,则会产生保存退步(如下图卡塔尔。

图片 3

措施三,按小编当下的驾驭水平,感到是最可相信的,从数据库拿到多少后假若把必要改的值赋下就能够了(从高并发、高质量方向也会有缺欠,因为扩张了数据库的支出,要求先要到多少映射到实体对象,在改进实体的属性值,还要再保存到数据库,分明多了三遍数据库人机联作,并且黄金年代旦实体对象比异常的大,对系统的费用定会扩大卡塔尔.

独持争议各执己见吧

        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnUpdate_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                //方案一:只有Modified = true的才修改
                /*
                UserAccout userAccount = new UserAccout();
                userAccount.FirstName = this.Txt_NewFirstName.Text;
                db.UserAccoutSet.Attach(userAccount);
                db.Entry(userAccount).Property(x => x.FirstName).IsModified = true;
                */

                //方案二:只有Modified = true的才修改
                /*
                UserAccout userAccount = new UserAccout();
                userAccount.FirstName = this.Txt_NewFirstName.Text;
                userAccount.LastName = this.Txt_NewLastName.Text;
                userAccount.Id = Convert.ToInt32(CBox_User.SelectedValue);
                userAccount.AuditFileds.UpdateDate = DateTime.Now;
                userAccount.AuditFileds.InsertDate = DateTime.Now;
                db.Entry(userAccount).State = System.Data.Entity.EntityState.Modified;
                db.Entry(userAccount).Property(item =>item.AuditFileds.InsertDate).IsModified = false;
                //存在的问题复杂类型中有2个标量类型,设置其中一个标量属性的IsModified为False时,整个复杂类型中的字段都没有存储
                */

                //方案三
                int userId = Convert.ToInt32(CBox_User.SelectedValue);
                var userSet = db.UserAccoutSet.Where(p => p.Id == userId).First();
                userSet.FirstName = this.Txt_NewFirstName.Text;
                userSet.LastName = this.Txt_NewLastName.Text;
                userSet.AuditFileds.UpdateDate = DateTime.Now;
                db.SaveChanges();
                MessageBox.Show("修改完成!");
            }
        }

【遗留难题】//存在的标题积重难返类型中有2个标量类型,设置此中二个标量属性的IsModified为False时,整个复杂类型中的字段都不曾存款和储蓄

                即使有先生知道怎么清除,求指导,不胜谢谢。

图片 4

三、查询数据

 

        /// <summary>
        /// 查询数据绑定dataGirdView
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnQuery_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                List<UserAccout> list = db.UserAccoutSet.Where(x =>x.FirstName == "zhou").ToList();
                dataGridView1.DataSource = list;
            }     
        }

 

四、删除数据

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnDelete_Click(object sender, EventArgs e)
        {
            using (OrderDBContainer db = new OrderDBContainer())
            {
                //方式一、按员工的ID删除
                int userId = Convert.ToInt32(CBox_User.SelectedValue);
                UserAccout userSet = new UserAccout() { Id = userId };
                db.Entry(userSet).State = System.Data.Entity.EntityState.Deleted;
                db.SaveChanges();
                MessageBox.Show("删除完成!");
            }
        }

链接: https://pan.baidu.com/s/1i5cRdy9 密码: z63m

打赏支付宝:

图片 5

相关文章