实体框架的简称,下同)有三种方式,分别是:数据库优先、模型优先和代码优先。
下面是分贝优先的方式:
1.数据库库中存在两个表,一个是专业表,一个学生表,一个学生只能属于一个专业:
其中专业是专业表,学生是学生表学生身份是学号,MajorId是专业身份证,T _少校与学生是一对多的关系。
2.项目中添加数据库实体模型
因为之前没有配置过数据库连接,所以点击"新建库连接",如果之前配置过数据库连接,可以直接从下拉列表中选择或者新建
选择需要生成的表/存储过程等
点击"完成"
这里会弹出如下图的窗口,然后选择确定(如果再弹出,也选择确定),如果不小心点击了取消,可以在模型设计界面ctrl(S)保存的快捷键),或如下图的操作,然后会弹出窗口,一直确定就行。
这里是使用MVC,所以添加一个控制器来测试(这里为了快速生成读写的控制器方法,选择"包含读/写操作的MVC5控制器")
生成代码如下:
使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统网络。手动音量调节命名空间钟网络。控制器{公开课学生控制器:控制器{//GET:学生公共行动结果索引(){ return View();} //GET:学生/详情/5公共动作结果详细信息(int id){返回视图();} //GET:学生/创建公共动作结果创建(){返回视图();}//post : Student/Create[httpset]公共操作结果Create(FormCollection集合){ try {//todo :在此添加插入逻辑返回重定向到操作(“索引”);} catch { return View();} }//GET: Student/Edit/5公共动作结果Edit(int id){ return View();}//post : Student/Edit/5[httpset]公共操作结果Edit(int id,FormCollection collection){ try {//todo :在此添加更新逻辑返回重定向到操作(“索引”);} catch { return View();} } //GET:学生/删除/5公共操作结果delete(int id){ return View();}//post : Student/Delete/5[httpset]公共操作结果Delete(int id,FormCollection collection){ try {//todo :在此添加删除逻辑返回重定向到操作(“索引”);} catch { return View();} } }}同样的方法添加一个重要的控制器
使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统网络。手动音量调节命名空间钟网络。控制器{公共类主要控制者:控制者{//GET:主要公共行动结果索引(){ return View();}//GET: main/Details/5公共动作结果Details(int id){ return View();}//GET:主/创建公共动作结果Create(){ return View();}//post : main/Create[httpset]公共操作结果Create(FormCollection collection){ try {//todo :在此添加插入逻辑返回重定向到操作(“索引”);} catch { return View();} }//GET: main/Edit/5公共动作结果Edit(int id){ return View();}//post : main/Edit/5[httpset]公共操作结果Edit(int id,FormCollection collection){ try {//todo :在此添加更新逻辑返回重定向到操作(“索引”);} catch { return View();} }//GET: main/Delete/5公共动作结果Delete(int id){ return View();}//post : main/Delete/5[httpset]公共操作结果Delete(int id,FormCollection collection){ try {//todo :在此添加删除逻辑返回重定向到操作(“索引”);} catch { return View();} } }}由于学生表主要身份依赖于重要的表,所以需要先有专业,才能新增学生数据(这里不讨论是否合理)
编写逻辑代码,创建视图
使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统网络。手动音量调节利用钟。网络模型;命名空间钟网络。控制器{公共类主控制器:控制器{//GET:主公共行动结果索引(){ var Major=新efdb实体().少校.to list();返回视图(专业);}//GET: Major/Details/5公开行动结果Details(int id){ var Major=新的efdb实体().少校.find(id);if(major==null){ 0返回内容('参数错误');}返回视图(专业);}//GET:主/创建公共动作结果Create(){ return View();}//post : Major/Create[httpet]公开行动结果Create(T _ Major实体){ if(实体!=null){ var entities=新的efdb实体();实体少校.添加(实体);实体saveChanges();}返回RedirectToAction(' Index ');}//GET: main/Edit/5公共动作结果Edit(int id){ var entity=new efdb entities().少校.find(id);如果(实体==null){ 0返回内容('参数错误');}返回视图(实体);}//post : Major/Edit/5[httpset]公开行动结果编辑(T _ Major实体){ if(entity==null){返回Content('参数错误');} var实体=新的efdb实体();#地区方式一////该方式一般是根据主键先读取数据,然后再逐个赋值,最后更新//var oldEntity=entities .少校.查找(实体. id);//if (oldEntity!=null) //{ //oldEntity .名称=实体。名称;//实体saveChanges();//} #endregion #region方式二//该方式是直接将新的实体(可能是新的出来的并且对主键等的属性赋值好了)附加到上下文,然后标记状态为修改已修改的实体少校.附加(实体);实体。条目(实体)。状态=系统。数据。实体。实体状态。已修改;实体saveChanges();#endregion返回重定向到操作(“索引”);}//GET: Major/Delete/5公共动作结果Delete(int id){ var Major=new efdb实体().少校.find(id);返回视图(主要);}//post : main/Delete/5[httpset]公共操作结果Delete(int id,FormCollection collection){ try {//todo :在此添加删除逻辑var实体=新的efdb实体();var major=实体少校.find(id);实体少校.移除(主要);实体saveChanges();返回RedirectToAction(' Index ');} catch { return View();} } }}添加专业:
专业列表:
同样实现学生控制器与视图:
使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统网络。手动音量调节利用钟。网络模型;命名空间钟网络。控制器{公共类学生控制器:控制器{私有EFDbEntities实体=新efdb实体();//GET:学生公共行动结果索引(){ var学生=实体.学生.to list();返回视图(学生);}//GET: Student/Details/5公共行动结果Details(int id){ var Student=entities .学生.find(id);返回视图(学生);}//GET:学生/创建公共行动结果Create(){查看数据['主要id ']=实体少校.选择(m=新选择列表项{文本=m .名称,值=m . id。tostring()});返回视图();}//张贴:学生/创建[httpset]公共行动结果创建(T _ Student实体){实体.学生.添加(实体);实体saveChanges();返回RedirectToAction(' Index ');}//GET: Student/Edit/5公共动作结果Edit(int id){ var Student=entities .学生.find(id);ViewData['MajorId']=实体少校.选择(m=新选择列表项{文本=m .名称,值=m . id。tostring()});返回视图(学生);}//post : Student/Edit/5[http set]公开行动结果编辑(T _ Student实体){ if(entity==null){返回Content('参数错误');}个实体学生时代.附加(实体);实体。条目(实体)。状态=系统。数据。实体。实体状态。已修改;实体saveChanges();返回RedirectToAction(' Index ');}//GET: Student/Delete/5公共动作结果Delete(int id){ var Student=entities .学生.find(id);返回视图(学生);}//post : Student/Delete/5[httpset]公共操作结果Delete(int id,FormCollection collection){ var Student=entities .学生.find(id);实体学生时代.移除(学生);实体saveChanges();返回RedirectToAction(' Index ');} }}添加学生时,报错如下:
于是在控制器中增加如下代码:
刷新页面:
编辑:
删除:
列表:
在主控制器中有介绍仰角指示器的两种更新方式。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。