C# Entity Framework

C# 的Entity Framework是像Hibernate的東西
用途在把資料庫的資料,當成物件來使用
但是條件限定用Linq語法且只限於連SQLServer
其他資料庫就哭哭了

而Hibernate則是免費套件
像java就是用這個來實現將資料庫物件化
而且可以連的資料庫很多種,除SQLServer Oracle MySQL皆可

使用上相當方便,程式碼也少
當然缺點也有,除了讓程式人員懶惰變笨
Entity Framework會透過翻譯將Linq語法
釋成標準的SQL語法,假設短時間內有大量的資料吞吐時
每道insert命令都必預翻譯後再跟資料庫連接
接著再回傳給程式中,這樣效率太低了
直接下sqlcommand會必較適合




前置作業:

進入到SQLServer中下面的命令,主要是建立主鍵及拉關聯

USE 中文北風

ALTER TABLE 供應商 ADD CONSTRAINT 供應商編號主鍵 PRIMARY KEY(供應商編號)
ALTER TABLE 員工 ADD CONSTRAINT 員工編號主鍵 PRIMARY KEY(員工編號)
ALTER TABLE 客戶 ALTER COLUMN 客戶編號 NVARCHAR(5) NOT NULL
GO
ALTER TABLE 客戶 ADD CONSTRAINT 客戶編號主鍵 PRIMARY KEY(客戶編號)
ALTER TABLE 產品資料 ADD CONSTRAINT 產品編號主鍵 PRIMARY KEY(產品編號)
ALTER TABLE 產品類別 ADD CONSTRAINT 類別編號主鍵 PRIMARY KEY(類別編號)
ALTER TABLE 貨運公司 ADD CONSTRAINT 貨運公司編號主鍵 PRIMARY KEY(貨運公司編號)
ALTER TABLE 訂貨主檔 ADD CONSTRAINT 訂單編號主鍵 PRIMARY KEY(訂單號碼)
ALTER TABLE 訂貨明細 ALTER COLUMN 訂單號碼 INT NOT NULL
GO
ALTER TABLE 訂貨明細 ADD CONSTRAINT 訂單編號與產品編號主鍵 PRIMARY KEY(訂單號碼,產品編號)


ALTER TABLE 產品資料 ADD CONSTRAINT 產品類別外鍵 FOREIGN KEY (類別編號) REFERENCES 產品類別(類別編號)
ALTER TABLE 產品資料 ADD CONSTRAINT 供應商外鍵 FOREIGN KEY (供應商編號) REFERENCES 供應商(供應商編號)
ALTER TABLE 訂貨主檔 ADD CONSTRAINT 客戶外鍵 FOREIGN KEY (客戶編號) REFERENCES 客戶(客戶編號)
ALTER TABLE 訂貨主檔 ADD CONSTRAINT 員工外鍵 FOREIGN KEY (員工編號) REFERENCES 員工(員工編號)
ALTER TABLE 訂貨主檔 ADD CONSTRAINT 貨運公司外鍵 FOREIGN KEY (送貨方式) REFERENCES 貨運公司(貨運公司編號)
ALTER TABLE 訂貨明細 ADD CONSTRAINT 訂單編號外鍵 FOREIGN KEY (訂單號碼) REFERENCES 訂貨主檔(訂單號碼)
ALTER TABLE 訂貨明細 ADD CONSTRAINT 產品編號外鍵 FOREIGN KEY (產品編號) REFERENCES 產品資料(產品編號)


到C#專案中新增項目,選擇ADO.NET實體資料模型



接著照精靈的步驟下一步即可

程式碼:


private void button1_Click(object sender, EventArgs e)
{   
    //這樣就撈出資料了
    中文北風Entities mydb = new 中文北風Entities();
    var result = from cc in mydb.客戶
                    //where cc.地址.StartsWith("桃園")
                    where cc.地址.Contains("鄉")
                    select cc;
    dataGridView1.DataSource = result.ToList();
}
//-----------------------------------------------------------------------
private void button2_Click(object sender, EventArgs e)
{
    中文北風Entities mydb = new 中文北風Entities();
            
    //由於sql中已建立好關聯,所以本來的代號都可以用打點的方式代出名稱
    var result = from qq in mydb.產品資料
                    select new
                    {
                        product=qq.產品,
                        price=qq.單價,
                        stock=qq.庫存量,
                        supply=qq.供應商.供應商名稱, //原名供應商1,記得改成供應商名稱
                        productType=qq.產品類別.類別名稱,
                        //supply及productType都是透過代碼從別的表拉進來的
                        //連join都可省略去
                    };

    dataGridView1.DataSource = result.ToList();
}
//-----------------------------------------------------------------------
private void button3_Click(object sender, EventArgs e)
{
    中文北風Entities mydb = new 中文北風Entities();
    /*
        * 說明:找出特定的客戶進行異動
        * 
        * var customer = (from cc in mydb.客戶
                    where cc.客戶編號 =="WOLZA"
                    select cc).First();
    customer.連絡人職稱 = "秘書";
    customer.地址 = "桃園縣富國路48號2樓";
    */

    //說明:找出所有台北縣的並利用foreach來更換為"新北市"
    var customers = from cc in mydb.客戶
                    where cc.地址.StartsWith("台北縣")
                    select cc;
    foreach (var c in customers)
    {
        c.地址 = c.地址.Replace("台北縣", "新北市");
    }
    mydb.SaveChanges();
    MessageBox.Show("資料異動完畢"); 
}
//-----------------------------------------------------------------------
private void button4_Click(object sender, EventArgs e)
{
    //在客戶中新增一筆資料
    中文北風Entities mydb = new 中文北風Entities();
    客戶 c = new 客戶();

    c.客戶編號 = "ZZZZZ";
    c.連絡人 = "王小明";
    c.公司名稱 = "賺錢好難公司";
    c.地址 = "桃園市龜龜路100號";
    c.連絡人職稱 = "總裁";

    mydb.客戶.Add(c);
    mydb.SaveChanges();
    MessageBox.Show("新增成功");
}
//-----------------------------------------------------------------------
private void button5_Click(object sender, EventArgs e)
{
    //刪除剛剛新增的資料
    中文北風Entities mydb = new 中文北風Entities();
    var customer = from cc in mydb.客戶
                    where cc.客戶編號 == "ZZZZZ"
                    select cc;  
    foreach (var c in customer)
        mydb.客戶.Remove(c);

    mydb.SaveChanges();
    MessageBox.Show("刪除成功");

}

留言

熱門文章