因为实习的原因,程序之中用到了较多的数据库操作逻辑。如果每一处数据库操作都手写的话,工作量较大且后期不易于维护,所以希望能通过 ORM 框架来解决这两个问题。
在昨天之前,对于 ORM 这个词汇,我也仅仅只是在上个学期的 Java EE 课上看企业老师 "神速" 地使用 Hibernate 做了建立数据库、插入数据的演示。
这两天花了很多时间了解 Entity Framework,终于在今晚成功地实现了 "查插删改",中间经过了很多的波折。例如:查找的很多资料提供的代码都是不完整的,同时他们的讲解也不够 "新人(菜鸟)友好型"。所以我决定把一个简单的实例的具体步骤写出来,帮助像我这样的菜鸟快速将 EF(Entity Framework) 应用起来。
如果博文有不当之处,欢迎指出,谢谢~
首先是两个概念
使用 Entity Framework 在实际数据库相关代码开发中可以采取三种方式:
本实例采用第三种方式,即 Model First。
本实例使用的是 Visual Studio 2017(Community),通过一个 WinForm 程序访问 SQL Server 2016(Express) 数据库来演示。
本程序可以实现学生信息的自我维护,包括对用户名、密码、性别、班级、电话等资料的处理。学生可以填写信息注册账号,然后使用账号登录查看自己的信息,并对自己的信息进行修改。
演示:
两个实体:
4.4 通过 EF 框架实现插入功能。
- // 登录
- private void button_Login_Click(object sender, EventArgs e)
- {
- // 使用 EF 框架实现查询
- User u=sstudentContainer.UserSet.Where(user => user.Userame == textBox_Username.Text && user.Password == textBox_Password.Text).FirstOrDefault();
- // 如果查询不到,会返回 null
- if (u != null)
- {
- new MyProfile(u).Show();
- this.Hide();
- }
- else
- {
- MessageBox.Show("用户名或密码错误,请重试!");
- }
- }
4.5 通过 EF 框架实现删除功能。
- // 注册
- private void button_Signup_Click(object sender, EventArgs e)
- {
- try
- {
- // 使用 EF 框架实现添加新数据功能
- User u = new User();
- Profile p = new Profile();
- u.Password = this.textBox_Password.Text;
- u.Userame = this.textBox_Username.Text;
- p.Address = this.textBox_Address.Text;
- p.Hobby = this.textBox_Hobby.Text;
- p.PhoneNumber = this.textBox_PhoneNumber.Text;
- p.Sex = this.textBox_Sex.Text;
- p.StudentNumber = this.textBox_StudentNumber.Text;
- p.姓名 = this.textBox_FullName.Text;
- u.Profile = p;
- // 添加两个新对象分别进入两张表
- sstudentContainer.UserSet.Add(u);
- // 因为 EF 会自动将关联的对象同时加入数据库,所以无需手动增加
- //sstudentContainer.ProfileSet.Add(p);
- // 保存新增记录进入数据库
- sstudentContainer.SaveChanges();
- MessageBox.Show("注册成功!");
- this.Close();
- }
- catch (Exception)
- {
- MessageBox.Show("抱歉,注册失败!");
- throw;
- }
- }
4.6 通过 EF 框架实现更新功能。
- // 删除所有用户资料
- private void button_Delete_Click(object sender, EventArgs e)
- {
- // 使用 EF 框架实现删除数据
- try
- {
- // 需要首先使用 sstudentContainer 查找到该项记录(对象),然后将其删除
- User u = sstudentContainer.UserSet.Where(user => user.Id == this.user.Id).FirstOrDefault();
- Profile p = u.Profile;
- // 删除用户
- sstudentContainer.ProfileSet.Remove(p);
- sstudentContainer.UserSet.Remove(u);
- // 保存删除操作进入数据库
- sstudentContainer.SaveChanges();
- MessageBox.Show("再见,删除成功!");
- this.Close();
- }
- catch (Exception)
- {
- // 发生异常,删除失败
- MessageBox.Show("抱歉,删除失败!");
- throw;
- }
- }
4.7 当我们尝试运行程序的时候,会发现出现异常,这是因为在 UI 项目中缺少了数据库连接字符串,即下图中的选中部分。只要将其复制,即可。
- // 更新用户资料
- private void button_Update_Click(object sender, EventArgs e)
- {
- // 使用 EF 框架实现更新数据
- try
- {
- // 需要首先使用 sstudentContainer 查找到该项记录(对象),然后对其进行修改
- User u = sstudentContainer.UserSet.Where(user => user.Id == this.user.Id).FirstOrDefault();
- Profile p = u.Profile;
- u.Password = this.textBox_Password.Text;
- u.Userame = this.textBox_Username.Text;
- p.Address = this.textBox_Address.Text;
- p.Hobby = this.textBox_Hobby.Text;
- p.PhoneNumber = this.textBox_PhoneNumber.Text;
- p.Sex = this.textBox_Sex.Text;
- p.StudentNumber = this.textBox_StudentNumber.Text;
- p.姓名 = this.textBox_FullName.Text;
- // 保存更改进入数据库
- sstudentContainer.SaveChanges();
- MessageBox.Show("更新资料成功!");
- }
- catch (Exception)
- {
- // 发生异常,更新失败
- MessageBox.Show("更新资料失败!");
- throw;
- }
- }
EF 能帮我们做的事情还有很多,例如可以方便快捷地通过 ToList() 方法直接将数据库中所有数据转换为对象 List。而本文只是一个简单的入门实例,只是仅仅帮助初次接触 EF 摸不到头脑的新手快速实战应用,需要学习的还有很多。如果本文有任何错误或不当之处,敬请指出,共同进步,谢谢~
附上源代码:
来源: http://www.cnblogs.com/hiwangzi/p/EntityFrameworkSample.html