還記得,舊舊前發布過一篇文章:文本資料庫--.Net界未來的一朵奇葩,引爆超過百條的評論,說明大夥對文本資料庫,還是情有所屬的。經過多年的沉澱,在文本的操作上,已經有了些規模,因此,本文寫出來和大夥分享一下。 一:Code First 開始: 1:下載CYQ.Data V5,:http://www.cyqdata.com/download/article-detail-4262:解壓就一個dll,項目添加引用即可。3:既然是Code First,那我們就直接寫實體類,樣本如下: public class Users : CYQ.Data.Orm.OrmBase { public Users() { this.SetInit(this, "Users", "Txt Path={0}"); } public int ID {get;set;} public string UserName {get;set;} public string Password {get;set;} } 說明兩個點:1,繼承自OrmBase;2,建構函式裡指定表名“Users”和資料庫連結Txt Path={0})。 資料庫連結說明{0}代表根目錄):文本資料庫json儲存方式):Txt Path={0}Xml資料庫xml儲存方式) :Xml Path={0}其它資料庫,就是各資料庫的連結了或配置項了。 OK,現在就可以實操增刪改查了,下面輕輕的講一下。 二:Code First 代碼執行個體 1:插入與更新代碼和圖如下:650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/13132A262-0.jpg" border="0" align="absmiddle" alt="" /> 代碼說明:左側是增加和更新的代碼,右側是一簡單的樣本操作winform介面,這裡有兩重點說明。
1:為啥實體類要用using包含操作?對於文本的操作,內部機制是在記憶體操作的,直到調用Disponse,才寫到文本,因此,用using就是為了結束時調用Disponse寫到檔案去的。2:SetAutoParentControl是什麼東東?當控制項名按約束起名:為3字母+屬性名稱,如txtUserName,txtPassword時,可以採用自動取值法,這樣你拉N個控制項上去,代碼也不用改變的。傳進this就是form本身,orm會遍曆form下的控制項進行取值。 2:對於其它Orm功能,暫不詳寫了,下載裡有api文檔說明,這裡僅列出介面: /// <summary> /// 資料操作公用介面 /// </summary> /// <typeparam name="T"></typeparam> internal interface ICommon:IDisposable { bool Insert(); bool Insert(InsertOp option); bool Insert(bool autoSetValue); bool Insert(bool autoSetValue, InsertOp option);
bool Update(); bool Update(object where); bool Update(object where, bool autoSetValue); bool Delete(); bool Delete(object where); bool Fill(object where); MDataTable Select(); MDataTable Select(string where); MDataTable Select(int topN, object where); MDataTable Select(int pageIndex, int pageSize, string where, out int count); int GetCount(string where); bool Exists(string where); #region UI介面 void GetFrom(object control); void GetFrom(object control, object value); bool GetFromJson(string jsonOrFileName); void SetAutoParentControl(object parent, params object[] otherParent); void SetAutoPrefix(string autoPrefix, params string[] otherPrefix); void SetSelectColumns(params object[] columnNames); void SetTo(object control); void SetTo(object control, object value, bool isControlEnabled); void SetTo(object control, object value); void SetToAll(params object[] parentControls); #endregion string TableName { get; set; } string DebugInfo { get; } } 三:基礎說明解答 1:表從哪來、資料存哪?系統在初始化時,會根據表名和連結的地址,會根據屬性名稱自動產生相應的表結構在地址目錄,並且以json或xml方式儲存資料。 2:where支援sql?支援的,不過對於txt,xml,內建實現了最基礎的sql解析,可以滿足>,>=,<,<=,=,is null,is not null,like,order by 等基本本詢,不支援的有:函數,或group by等語句。 3:實用情境 有時候,資料並不大,用access太糾心,用sqlite伺服器安全設定又不允許,用mssql又覺得殺牛不用牛刀,那txt,xml就該出手了。
情境一:比如一簡單的設定檔,你寫個實體類,就可以輕鬆的操作了,不用建啥資料庫表 。
情境二:Code First的目的,當你需要快速構建代碼時,直接就用txt就上了,然後業務代碼就可以開始寫了,不用等DBA建完庫。
後期可根據需要,修改web.config的連結轉到mssql,mysql,oracle等資料庫,業務代碼不變的喲。
當然了,this.SetInit(this, "Users", "Conn");應該這麼寫,對應webconfig的Conn配置項。
情境三:對於wp7開發,直接操作txt,還是很合理的。 4:多資料庫相容性用過CYQ.Data的朋友都知道,支援多資料庫是非常輕鬆過度的,現在你玩txt,輕鬆換下連結就到mssql等其它資料庫了,所以玩好一個,其它資料庫同樣是相容的。
感興趣的朋友,可以玩一玩,過過Code First的癮!!!
本文出自 “路過秋天” 部落格,請務必保留此出處http://cyq1162.blog.51cto.com/2127378/894380