還記得,舊舊前發布過一篇文章:文本數據庫--.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,還是很合理的。
場景一:比如一簡單的配置文件,你寫個實體類,就可以輕松的操作了,不用建啥數據庫表 。
場景二: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的癮!!!