一、MVC项目目录简介
- APP_Data:
- App_Start:
- Content:
- Controllers:
- Fonts:
- Modules:
- Scripts:
- Views:
二、来自数据库的CodeFirst方式
1、从数据库生成Model
右击Models-添加-新建项-ADO.NET 实体数据模型




2、新建Controller及视图页
参考别人的步骤,但是vs2019没有以下选项。 Controllers-右击-新增-控制器-包含视图的MVC5控制器(使用Entity Framework)


选择添加,然后选择模型类,点击添加就完成了。

3、运行项目
Ctrl+F5运行项目,会自动打开浏览器,将url后面改为/User/Index


三、使用ado.net代码连接数据库
右键数据库的属性:

把连接字符串复制下来,打开web.config文件,找到connectionStrings标签

注意:如果自己添加的connectionString标签,请再次确认webconfig文件中是否有connectionString标签。两个connectionString标签存在会报错
接下来用代码操作数据库,我直接在控制器中写了
- 先引入三个命名空间
using System.Data;using System.Data.SqlClient;using System.Configuration;
- 在控制器中写代码
public class MainController : Controller{// GET: Mainpublic ActionResult Index(){SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);conn.Open();SqlCommand cmd = new SqlCommand("select * from student", conn);cmd.CommandType = CommandType.Text;SqlDataReader sqldr = cmd.ExecuteReader();while(sqldr.Read()){ViewBag.sno = sqldr["sno"];ViewBag.spwd = sqldr["spwd"];}conn.Close();return View();}}
3.在视图层引用ViewBag.sno和 ViewBag.spwd

4.界面显示

我这里的代码还有点问题,就是只取出了最后一条数据,这里只证实数据库连接成功了,具体怎么增删改查请看第五点.
四、来自数据库的EF设计器模式
右键项目名->添加->新建项 出现下面界面:
选择ado.net实体数据模型,可以命名一下名称,我这里就不重新命名了,然后点击添加

添加完成后 选择实体数据模型向导

点击下一步

点击下一步

在目录下找到你新建的数据模型目录

可以看到这里有个xuankeEntities,这个对象可以声明成全局的上下文
xuankeEntities db = new xuankeEntities();
如上可以根据db这个对象实现数据的增删改查,以登陆界面的账号密码验证为例:
var result = from item in db.studentwhere item.sno == 'admin' && item.spwd == '123456'select item;if(result.Count()>0){//加载到主界面}
student是连接的数据库下的一个表,item可以自己随便命名,这段代码的意思是:
搜索学号为 admin 并且 密码为 “123456” 的学生信息返回给result,如果返回的result的信息数大于0,就代表有这个学生的信息,就转到主界面,代表登录成功。
五、使用ADO.NET实体数据模型实现简单增删改查
声明一个 EF的上下文.(这个上下文指向数据库)
StudentEntities dbContext = new StudentEntities();
1、增
//声明一个实体,并赋值Students stu = new Students();stu.StudentName = "李四";stu.StudentSex = "男";stu.StudentAge = 19;stu.StudentProvince = "上海";stu.StudentPhone = "17468523001";//写法一://dbContext.Students.Add(stu);//写法二:dbContext.Entry<Students>(stu).State = System.Data.Entity.EntityState.Added;//告诉上下文把实体的变化保存到数据库里面去,返回受影响行数int i = dbContext.SaveChanges(); //三元表达式string str = i == 1 ? "添加成功" : "添加失败";Console.WriteLine(str);
2、删
Students stu = new Students();stu.StudentNO = 1833200159;dbContext.Entry<Students>(stu).State = System.Data.Entity.EntityState.Deleted;int i = dbContext.SaveChanges();string str = i == 1 ? "删除成功" : "删除失败";Console.WriteLine(str);
3、修改整条数据
Students stu = new Students();stu.StudentNO = 1833200160;stu.StudentName = "赵六";stu.StudentSex = "男";stu.StudentAge = 20;stu.StudentProvince = "广州";stu.StudentPhone = "18654257894";dbContext.Entry<Students>(stu).State = System.Data.Entity.EntityState.Modified;int i = dbContext.SaveChanges();string str = i == 1 ? "修改成功" : "修改失败";Console.WriteLine(str);
4、修改单个属性
Students stu = new Students();stu.StudentNO = 1833200160;stu.StudentName = "露丝";stu.StudentAge = 0;stu.StudentSex = "女";stu.StudentProvince = "";stu.StudentPhone = "";//将当前实例附加到上下文来处理dbContext.Students.Attach(stu);//写法一://这里修改了名字和性别,因为其他的属性字段是不可空的所以为了通过验证必须//赋值(赋上了任意的值,但是我们并没有保存这些更改)//dbContext.Entry<Students>(stu).Property("StudentName").IsModified = true;//dbContext.Entry<Students>(stu).Property("StudentSex").IsModified = true;//写法二:Lambda表达式dbContext.Entry<Students>(stu).Property<string>(s => s.StudentName).IsModified = true;dbContext.Entry<Students>(stu).Property<string>(s => s.StudentSex).IsModified = true;int i = dbContext.SaveChanges();string str = i == 1 ? "修改成功" : "修改失败";Console.WriteLine(str);
5、查询整张数据表
foreach (var item in dbContext.Students){//打印整张表的学号和姓名Console.WriteLine("学号: " + item.StudentNO + " 姓名: " + item.StudentName);}
6、Linp表达式按条件查询数据
//查询整张表女生的信息var temp = from s in dbContext.Studentswhere s.StudentSex == "女"select s;foreach (var item in temp){//打印女生的信息Console.WriteLine(item.StudentName);}
