# 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互相轉化