落实基本的CRUD功用,实现基本的CRUD功用

二、改进数据**

EF的更新自己询问的章程有如下二种(可能还有此外的措施)

【代码如下】

方法一、只有FirstName的值会修改,很彰着假若字段相比较多,每个字段都遍历赋值是否修改,展现不是很便利,故不提议利用,倘倘若接纳框架模板此外说吧。

主意二、只有InsertDate
的值不会被修改,其他的字段都会被修改,假使字段相比较多,表面上看起来相比较便于(只要设置不要涂改的列就行了),测试过程中也发觉弊端,倘若实体中有不可为空字段,且不再排除不保留的列的限定内,则会导致保存失利(如下图)。

图片 1

主意三,按自己眼前的知道水平,感觉是最靠谱的,从数据库得到数码后假使把需要改的值赋下就可以了(从高并发、高性能方向也有弊端,因为增添了数据库的支付,需要先要到数量映射到实体对象,在改动实体的属性值,还要再保存到数据库,彰着多了一回数据库交互,而且如若实体对象相比大,对系统的开支定会扩充).

仁者见仁智者见智吧

        /// <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时,整个复杂类型中的字段都并未存储

                假使有老师明白怎么解决,求指点,不胜感谢。

图片 2

三、查询数据

四、删除数据

        /// <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

打赏支付宝:

图片 3

四、删除数据

        /// <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

打赏支付宝:

图片 4

三、查询数据

二、保存操作

/// <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("保存成功!");
            }
        }

 

二、保存操作

/// <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("保存成功!");
            }
        }

 

一、设计录入界面

开创一个录入Form,用来管理UserAccount数据。

1.在档次文件上右键,接纳Add->New Item..

图片 5

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

3.添加如下输入框

图片 6

一、设计录入界面

创办一个录入Form,用来管理UserAccount数据。

1.在类型文件上右键,采取Add->New Item..

图片 7

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

3.添加如下输入框

图片 8

在率先篇的底子上,本文紧要教学基于EntityFramework 及SqlServer2012
实现基本的CRUD功能。

在第一篇的根基上,本文重要教学基于EntityFramework 及SqlServer2012
实现中央的CRUD功效。

 

        /// <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>
        /// 查询数据绑定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;
            }     
        }

 

二、革新数据**

EF的革新自己打听的章程有如下两种(可能还有任何的艺术)

【代码如下】

形式一、唯有FirstName的值会修改,很分明假若字段相比多,每个字段都遍历赋值是否修改,突显不是很便利,故不指出选用,淌假如拔取框架模板此外说啊。

办法二、只有InsertDate
的值不会被涂改,其他的字段都会被修改,假诺字段相比较多,表面上看起来相比较方便(只要设置不要改动的列就行了),测试过程中也意识弊端,假设实体中有不可为空字段,且不再排除不保留的列的限制内,则会促成保存失败(如下图)。

图片 9

主意三,按我当下的敞亮水平,感觉是最靠谱的,从数据库得到数码后一旦把需要改的值赋下就足以了(从高并发、高性能方向也有坏处,因为扩充了数据库的支付,需要先要到数码映射到实体对象,在修改实体的属性值,还要再保存到数据库,分明多了一遍数据库交互,而且假使实体对象相比大,对系统的开支定会扩展).

仁者见仁智者见智吧

        /// <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时,整个复杂类型中的字段都尚未存储

                假使有先生知道怎么化解,求指点,不胜感谢。

图片 10