Linq的好處非常明顯,不僅把資料庫訪問層真正做到面向對象,而且也可以把系統的許可權封裝到資料庫訪問層去了。 微軟目前穩定的Linq框架是Entity Framework 6.1,我自己編寫了一個資料庫工具Mr.E,可以用來設計資料庫結構,並且把資料庫結構編譯成Entity Framework的對象, ...
Linq的好處非常明顯,不僅把資料庫訪問層真正做到面向對象,而且也可以把系統的許可權封裝到資料庫訪問層去了。
微軟目前穩定的Linq框架是Entity Framework 6.1,我自己編寫了一個資料庫工具Mr.E,可以用來設計資料庫結構,並且把資料庫結構編譯成Entity Framework的對象,可以說是自動化的code first模式。
Mr.E運行於.Net 4.5版本,大概功能如下:
1.網路版本,支持多人同時設計資料庫;
2.目前支持Sql Server、MySql、Sqlite資料庫;
3.支持資料庫結構更新;
---你的項目發佈後,如果再修改資料庫結構,可以使用Mr.E,對已經發佈的資料庫進行結構的更新。
4.支持資料庫類型變更;
---比如原來是Sql Server資料庫,可以在開發中途變更為MySql資料庫,而不需要變更代碼。
5.支持一個資料庫結構,多個資料庫類型;
---比如你的項目,它分為網路版和單機版,網路版使用Sql Server資料庫,單機版使用Sqlite資料庫,那麼你可以一直以Sql Server類型進行資料庫結構設計,到發佈的時候,把結構更新到另一個sqlite資料庫上即可。
6.關閉EF的數據跟蹤,提高性能
7.支持類似觸發器的代碼,通過代碼,可以捕捉全局數據表的insert update delete事件;
---這樣,相當於可以用c#去寫觸發器了
8.支持定義索引
9.支持級聯刪除,級聯刪除的數據同樣支持7裡面的特性
我文章裡面提到的下載項,都在http://www.cnblogs.com/IWings/p/5814468.html 因為會不時更新,上面有顯示上次更新的時間,大家可以及時更新
需要Mr.E源碼的朋友可以加我qq索取。(896872647)
安裝步驟:
1.配置Mr.E的IIS服務站點
點擊下載ECWeb.rar文件,解壓後,在IIS創建一個網站執行它,埠可以任意定義,例如:666,應用池必須是.Net 4.5或以上版本
2.下載客戶端
下載Mr.E.rar文件,解壓後,直接運行EJClient.exe,彈出登錄視窗,輸入上一步iis裡面配置的網站路徑,用戶名預設:sa,密碼是:1
3.創建資料庫
首先,需要新建一個工程,點擊菜單【project】,新建一個工程
然後,展開新建的project,在Databases點擊右鍵,新建一個資料庫
註意:如果是sqlite類型資料庫,如上圖,資料庫放在F:\SqliteLinqTest,那麼必須確認IIS有讀寫F:\SqliteLinqTest文件夾的許可權,否則無法創建
3.創建數據表
先在【數據模塊】那裡點擊右鍵,添加一個目錄,然後在目錄下麵添加一個模塊
----->
然後雙擊“基本信息”模塊,在它的區域裡面去添加數據表。這樣子,數據表就可以分類管理,不像sql server那樣,所有表都列在一起
--->
4.編譯資料庫,生成dll文件
右鍵點擊TestDB->【編譯】,生成它的dll文件。
5.在代碼中訪問資料庫
新建一個.Net工程,引用EntityDB.dll以及和它同目錄的所有dll、剛纔生成的TestDBDataObjects.dll、.Net自帶的System.Data.Linq
項目編譯後,需要把EntityDB.rar裡面所有dll,包括x86 x64文件夾都拷貝到運行目錄,bin\Debug下麵,那些都是運行時所需要的
下麵是C#訪問資料庫的代碼
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace LinqTest1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { using (var db = new Test.DB.TestDB(@"data source=""F:\SqliteLinqTest\TestDB""", EntityDB.DatabaseType.Sqlite)) { //開始事務 db.BeginTransaction(); try { //添加數據 var user = new Test.UserInfo(); user.UserName = "張三"; user.Password = "123"; db.Update(user); Debug.WriteLine("張三的id是" + user.id); //更新數據 var zhangSan = (from m in db.UserInfo where m.UserName == "張三" select m).FirstOrDefault(); zhangSan.Password = "678"; db.Update(zhangSan); //刪除數據 var data = db.UserInfo.FirstOrDefault(m => m.UserName == "李四"); if (data != null) { db.Delete(data); } //提交事務 db.CommitTransaction(); } catch { //回滾事務 db.RollbackTransaction(); throw; } } } } }
從代碼中可以看到,因為我關閉了EF的數據跟蹤,所以,數據的 insert update delete等,需要調用db.Update() db.Delete()去實現,不能用EF自帶那種方式去做