周末一起用文本數據庫玩玩Code First


還記得,舊舊前發布過一篇文章:文本數據庫--.Net界未來的一朵奇葩,引爆超過百條的評論,說明大伙對文本數據庫,還是情有所屬的。

經過多年的沉淀,在文本的操作上,已經有了些規模,因此,本文寫出來和大伙分享一下。

 

一:Code First 開始:

 

2:解壓就一個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:插入與更新代碼和圖如下:
 

代碼說明:

左側是增加和更新的代碼,右側是一簡單的示例操作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的癮!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM