# Entity Framwork 与ADO.net的区别
https://www.cnblogs.com/nodot1/p/9514982.html
https://blog.csdn.net/wangzl1163/article/details/72897170
两者都是数据访问技术。可以说entity是在 ado.net 上面 的优化和二次开发。
也就是说使用了 EOF 模型以后,无需再写 sql 语句。比如对象 eof.add()就可以代表 sql 的添加数据的语句了。
它们有以下几点区别:
ADO.Net是开发人员自己select、update等写sql语句,来实现对数据库的增删改查等操作;采用EF进行开发操作数据库的时候,只需要操作对象,这样做使开发更方便,此时可以让开发人员使用C#的语法,来完成对数据库进行操作,完全的面向对象思想。
ADO.Net对内存消耗较小;而EF对内存消耗比较大,EF的性能不如ADO.Net.
代码的可读性。使用EF的代码的可读性更高。
联系:EF的底层是基于ADO.Net技术的。比如对数据操作的时候最终都是转化成SQL语句的。
> entity framwork虽然可读性更高,但占用内存更大,建议如果不是必须,不用迷信。
# 创建entity framwork实体数据模型
在解决方案资源管理器中右击 => 添加 => ADO实体数据模型。
>注意命名:只要第一步生成实体模型命名即可。名字可以跟数据库名字一样,比如“审图表”。后续有几个需要输入名字的最好不要变,默认即可。比如该实体模型的连接,会自动叫“审图表Entities”;命名空间的名字会自动叫“审图表Model”。
会出现后缀名为.edms的文件。

出现图形界面

> 注:如果数据库中无主键,则无法形成可视化的实体模型。
# 删除entity framwork实体数据模型
在解决方案中右击即可删除。包括下拉的内容。

但删除完后,如果要再新建一个同名的entity framwork模型则会提示:与现有连接设置重复。
此时需打开App.config,在 `connectionSring`中,将就的`add name` 删除,即可添加。


# 利用EF实体数据模型实现数据增删改查
需要创建using命名空间。
## 显示
利用dataGridView控件,让选中的数据记录可以显示在上面。

先要出发dataGridView中的CellClick事件。如果双击DGV控件,那么出现的是CellContentClick事件。所以要单击后再选择小闪电。3双击即可触发。

```
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex > 0)//判断选中的行是否有内容
{
strPMID = Convert.ToString(dataGridView1[0, e.RowIndex].Value).Trim();//中括号内表示行、列索引号,trim的意思是删除头尾中的空格。
using (审图表Entities1020 EFdb = new 审图表Entities1020())
//实例化审图表实体模型
{
审核信息 shxx = EFdb.审核信息.Where(W => W.项目编号 == strPMID).FirstOrDefault();
//实例化审图表实体模型下的审核信息表,用strPMID关键字段进行查找,生成一张只有一行的临时表。
if (shxx != null)
{
tb_xmbh.Text = shxx.项目编号;
tb_zgsbh.Text = shxx.子公司编号;
tb_pjname.Text = shxx.项目名称;
tb_pjmanager.Text = shxx.项目经理;
tb_signdate.Text = shxx.登记时间.ToString();
}
}
}
}
```
## 增加
```
private void btn_add_data_Click(object sender, EventArgs e)
{
//添加数据操作
using (审图表Entities1020 EFdb = new 审图表Entities1020())//创建实体数据模型
{
审核信息 shxx = new 审核信息 //通过ef实体模型中的表名创建实体对象
{
//为实体对象赋值,也就是各个字段的值
项目编号 = tb_xmbh.Text,
子公司编号 = tb_zgsbh.Text,
项目名称 = tb_pjname.Text,
项目经理 = tb_pjmanager.Text,
登记时间 = Convert.ToDateTime(tb_signdate.Text),
};
EFdb.审核信息.Add(shxx);//添加模型.表名的
EFdb.SaveChanges();//对操作写入数据库
dataGridView1.DataSource = EFdb.审核信息.ToList();//直接更新数据库显示
}
}
```
## 修改
```
private void btn_modify_Click(object sender, EventArgs e)
{
using (审图表Entities1020 EFdb = new 审图表Entities1020())
{
审核信息 shxx = new 审核信息 { 项目编号 =tb_xmbh.Text };//被放到这里的字段是不能改动的,否则就会出现错误提示
EFdb.审核信息.Attach(shxx);//构造sql语句
//重新为除了项目编号以外的各个字段赋值
shxx.子公司编号 = tb_zgsbh.Text;
shxx.项目名称 = tb_pjname.Text;
shxx.项目经理 = tb_pjmanager.Text;
shxx.登记时间 = Convert.ToDateTime(tb_signdate.Text);
EFdb.SaveChanges();
dataGridView1.DataSource = EFdb.审核信息.ToList();
MessageBox.Show("修改成功!");
}
}
```
## 删除
要实现的是:在DataGridView 控件中右击,可启动“删除”功能。
1、需添加右击的控件,以实现功能;
2、完成“删除”动作的代码
1、在form1窗口中添加contextMenuStrip1控件,以便能右击

2、双击左上角“删除”两个字,就能启动控件代码
```
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
using (审图表Entities1020 EFdb = new 审图表Entities1020())//创建ef实体模型的对象
{
//查找要删除的记录并显示在上面的框中,与新建不同
审核信息 shxx = EFdb.审核信息.Where(W => W.项目编号 == strPMID).FirstOrDefault();//创建实体模型中表格的对象,返回值是只包含一行的一张表
try
{
if (shxx != null)
{
EFdb.审核信息.Remove(shxx);
EFdb.SaveChanges();
dataGridView1.DataSource = EFdb.审核信息.ToList();
MessageBox.Show("删除成功");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
```
# 连接数据库的更新
图形界面右击

- 帮助文档 microsoft helo viewer
- c#开发环境及visual studio安装注意事项
- c#程序基本结构-基本语法
- Q1: public static void main(String[] args) 是什么意思
- Q2: c#命名空间+Main方法
- Q3:注释+命名规则+代码规则
- Q4: c#语句 system => console
- Q5: 数据类型 .net
- Q5: 常用名字、变量、运算符
- Q6: 对话窗输入-属性
- Q7: 递归
- Q8:决策分支、条件判断语句 if 语句
- Q9:数组
- Q10:字符串
- Q11:对象、类、访问权限、静态动态函数
- Q12:方法及参数——继承于类
- Q13:构造函数
- Q14:继承——base 关键字
- Q15:多态、虚方法、接口
- Q16:创建窗体应用、控件
- Q17:Ado数据访问、连接 sqlserver 数据库
- Q18: 读取数据command + DataRead( )、DataSet + DateAdapter
- Q19: Entity Framwork、entity 与 ADO.net的区别
- Q20: 对话框、文件、文件夹
- Q21: 导入excel数据、更新到 dbo 数据库中
- Q26: 获取 excel 中每个 sheet 的表名
- Q22: 两个窗体之间数据+方法传递
- Q23: 数学对象
- Q24: c#网站编写
- Q25: visual studio2017如何查看帮助
- Q27: c# dictionary 字典对象
- Q28: 数组与dataTable互相转化