项目地址 :  https://github.com/kelin-xycs/SimpleEntity

SimpleEntity

一个 用 C# 实现的 简单的 持久层 Entity 实现 。

这是一个 用 C# 实现的 简单的 持久层 Entity 实现 。

和 其它的 持久层 框架 不同 , Simple Entity 并不打算 提供一个 抽象层 来 封装 和 隐藏 关系数据库 。 相反 , 在 SimpleEntity 的 设计 里 , 应用程序 和 关系数据库 之间 是 完全 公开 透明 自由 的 。 SimpleEntity 提供 对象 的 方式 来 访问 数据库 , 帮助 开发 更便捷 , 设计 更清晰(结构化 对象化) 。

SimpleEntity 提供了 一个 DbContext 类 。

DbContext 类 包含 Save(object entity) , Update(object entity) , UpdateNull(string[] columnNames, object id) , Delete(object id) , Flush() , Get(object id) , List Get(object[] ids) 方法 。

Save(object entity) 方法 将 entity Insert 到 数据库 表 中 ;

Update(object entity) 方法 Update entity 对应 的 表 资料 , 只 Update 不为 null 的 Property , 换句话说 , 要 Update 哪个(哪些) 栏位 , 就对 对应 的 Property 赋值 就行 。 不 Update 的 Property 不赋值 。

UpdateNull(string[] columnNames, object id) 方法 用于 将 指定 的 栏位 Update 为 null , 有些时候, 需要 将 某些 栏位 Update 为 null , 就 可以 使用 UpdateNull() 方法 。

Delete(object id) 方法 删除 表 资料 。 参数 id 为 主键 。 只支持 单一列 作为 主键 。 不支持 多列联合主键 。 这也是 OR Mapping 里的 一个 惯例 吧 。

Flush() 方法 将 Save() Update() UpdateNull() Delete() 方法 的 更新结果 提交 到 数据库 。 只有 Flush() 方法 才会 访问 数据库 。 Save() Update() UpdateNull() Delete() 方法 只是 将 更新 转换成 Sql 和 Sql参数 保存起来 。 在 Flush() 的 时候 才 会 批量(Batch)提交 到 数据库 。

Get(object id) 方法 根据 id 返回 entity , id 是 主键 。

List Get(object[] ids) 方法 根据 ids 返回 entityList , ids 是 一组 主键 。 这样可以 一次 返回 多个 主键 的 entity 对象 。

DbContext 是 线程级 的 操作 。 是 线程 安全 的 。 就是说, 在 一个 线程 里 , 可以在 任意个地方 创建任意个 new DbContext() 对象 。 效果 都 一样 。 相同 DB 配置(Connection String, Provider) 的 DbContext 的 更新操作 , 最终都会在 Flush() 方法 里 提交到 数据库 。

为了 更 清楚 的 说明 这一点 , 我们 看一下 这部分 的 实现原理 :

DbContext 实际的 操作 是 调用 SqlClientManager , SqlClientManager 是 实现 IActiveRecordManager 接口 的 一个类 。

SqlClientManager 会把 Save Update Delete 操作 转换 为 Sql 和 Sql参数 , 分别 存在 _sqlList , _paraList 两个 静态变量 里 。 这 2 个 静态变量 是 [ThreadStatic] 标记 标注 的 静态变量 。 就是说, 它们 和 普通的 静态变量 不同, 是 线程级 的 静态变量 。 每个 线程 都有 自己的 这 2 个 静态变量 。

从上面可以看出 , 目前 SimpleEntity 只 支持 SqlServer , 如果 想 支持 别的 数据库 , 比如 Oracle , 那么 可以 新增一个 类 OracleClientManager , 实现 IActiveRecordManager 接口 , 然后 , 把 SqlClientManager 拷贝 过去 稍微 修改 一下 就可以了。 啊 哈哈哈

关于 事务(Transaction) , 可以使用 TransactionScope(System.Transactions.TransactionScope) 。 将 Flush() 放在 TransactionScope 中 就行 。

可以在 Demo 项目 中 查看 Demo , Test.aspx 是 测试 Save Update 等 各种操作 的 页面 , ManageDB.aspx 是 管理 测试 DB 的 页面 , 可以执行 Sql 。

因为 项目 使用 的 是 Asp.net 内置 SqlServer (LocalDb) , 所以 用 一个 ManageDB.aspx 页面 来 管理 DB 。

Demo 项目 是 一个 “Asp.net Web 窗体 项目” , 这个 内置 SqlServer 就是 创建项目 时 自动生成 的 。 mdf ldf 文件 存放在 项目 的 App_Data 文件夹 里 。 创建项目 时 还自动生成了 很多 其它 的 东西 , 我 把 那些 不需要 的 部分 删除 了 。

SimpleEntity的更多相关文章

  1. 使用gson进行json转换

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. 示例代码如下: 实体定义 ...

  2. Java Web系列:Spring依赖注入基础

    一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是 ...

  3. Hibernate Validation使用示例及讲解

    Hibernate Validation使用示例及讲解 时间 -- :: ITeye-博客 原文 http://wdmcygah.iteye.com/blog/2174680 主题 Java 在项目开 ...

  4. .NETCore 新型 ORM 功能介绍

    简介 FreeSql 是一个功能强大的 .NETStandard 库,用于对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.6.1+. 定义 IFre ...

  5. 【纯技术贴】.NETStandard FreeSql v0.0.9 功能预览

    年关将至,首页技术含量文章真是越来越少,理解大家盼着放假过年,哥们我何尝不是,先给大家拜个早年. 兄弟我从11月底发了神经,开启了 ORM 功能库的开发之旅,历时两个月编码和文档整理,目前预览版本更新 ...

  6. 我发起并创立了一个 .Net 平台上的 Web 业务系统 基础库 开源项目 WebEasy

    我 强调一点, 程序员 应该对 程序 有 控制感 . 过多的 控制反转 使 程序员 丧失了 对 程序 的 控制感 . 过多的 依赖注入 束缚了 程序员 的 创造力 . 过度复杂的 架构设计 束缚了 程 ...

  7. hibernate validator自定义校验注解以及基于服务(服务组)的校验

    hibernate validator是Bean Validation 1.1 (JSR 349) Reference Implementation,其广泛的应用在mvc的参数校验中,尤其是使用服务端 ...

  8. how to use greendao in android studio

    http://www.arjunsk.com/android/use-greendao-android-studio/ 1.新建一个java文件MainGenerator.java: import d ...

  9. greenDAO学习分享总结

    greenDAO(最新版本号V2.0.0的Readme) ======== greenDAO is a light & fast ORM solution for Android that m ...

随机推荐

  1. UI控件Telerik UI for WinForms发布R1 2019|附下载

    Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件.所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌 ...

  2. DevExpress WPF v18.2新版亮点(三)

    买 DevExpress Universal Subscription  免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...

  3. DevExpress WinForms v18.2新版亮点(六)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WinForms v1 ...

  4. 线程安全的集合类、CopyOnWrite机制介绍(转)

    看过并发编程的书,这两种机制都有所了解,但不扎实其实.看到别人的博客描述的很精辟,于是转过来,感谢! 原文链接:https://blog.csdn.net/yen_csdn/article/detai ...

  5. Python Counter

    from collections import Counter print(Counter("宝宝今年特别喜欢王宝强")) # 计数 lst = ["jay", ...

  6. calc() --- css3

    http://www.w3cplus.com/css3/how-to-use-css3-calc-function.html

  7. 前端笔记 (3.JavaScript 2)

    一般来说,js代码越来越庞大的时候,最好要把它存在一个js文件中, 通过src引入即可,这样具有维护性高,可缓存(加载一次,无需加载) 方便未来拓展的特性 正确写法: <script type= ...

  8. table标签总结

    一.table标签:定义一个表格简单表格由table元素以及一个或多个tr(行标签).th(表头单元格标签).td(普通单元格标签) <table border=1><tr>& ...

  9. PRCT-1302 the OCR has an invalid ip address

    PRCT-1302 the OCR has an invalid ip address 1. 报错信息 an internal error occurred within cluster verifi ...

  10. Excel导入CSV文件中文乱码

    参考: iconv -f UTF8 -t GB18030 a.csv >b.csv 或iconv -f UTF-8 -t GB18030 a.csv >b.csv