开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

文本数据库ORM应用CodeFirst体验

简介:
+关注继续查看
还记得,旧旧前发布过一篇文章:文本数据库--.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的瘾!!!




     本文转自cyq1162 51CTO博客,原文链接:http://blog.51cto.com/cyq1162/894380
,如需转载请自行联系原作者





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
10倍压缩比?Lindorm与其他数据库实测大比拼
让数据存储得起,我们不是说说而已。
409 0
时序数据库连载系列: RISElab的大杀器Confluo
挑战 随着越来越多的应用达到每秒千万级的数据点采集能力,比如终端IoT网络监控,智能家居,数据中心等等。 并且这些数据被应用于在线查询展示,监控,离线根因分析和系统优化。 这些场景要求系统具备高速写入,低延迟的在线查询以及低开销的离线查询的能力。
2470 0
系统学下POWERSHELL吧,工作当中可能用得到呢。不能像以前那样修修改改了。
把环境,编辑器,版本这些都弄清楚,说不好还能把FCL类库弄懂个大概???:)   [DateTime]::IsLeapYear(2008) $result = [DateTime]"06/21/2008" - [DateTime]::Now $result.
721 0
初试Code First(附Demo)
原文:初试Code First(附Demo) 写在前面 新建项目 安装EntityFramework程序包 创建模型 创建上下文DbContext 创建数据库、读/写数据 配置连接字符串 Code First 迁移 示例Demo下载 后记   以前逛园子的时候,很多大牛写的一些东西,什么AOP、DDD之类的,看过之后一头雾水,远望大牛,回过头看看自己,原来程序员的差距还可以这么大。
1128 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载