接下来要讲讲用MySoft.Data实现数据库业务逻辑,你会发现,用MySoft.Data操作数据库非常简单。在GuestBook这个示例中,我们会实现简单的数据库操作,如增、删、改、查询等。在之前,首先认识一下DbSession。这是   MySoft.Data的数据库操作会话对象,是所有数据库操作的入口。就是说在进行数据库操作时,首先要实例化一个DbSession对象,实例化的方式如下:

DbSession _DbSession
{
     get { return new DbSession("GuestBook"); } 
}

其中"GuestBook"是你在Web.Config的connectionStrings配置节中配置的数据库连接字符串name:

<connectionStrings> <add name="GuestBook" connectionString="Server=.;Database=GuestBook;Uid=sa;Pwd=benking" providerName="MySoft.Data.SqlServer9.SqlServer9Provider"/>   </connectionStrings>

providerName 根据自己的数据库类型,配置不同的数据库驱动,MySoft.Data中集成了如下数据库驱动:
             MySoft.Data.SqlServer.SqlServerProvider
             MySoft.Data.SqlServer9.SqlServer9Provider
             MySoft.Data.MsAccess.MsAccessProvider
             MySoft.Data.Oracle.OracleProvider

如果你需要其他数据库驱动,如MySql、SQLite、FireBird,则需要引用MySoft.Data开发包提供的这三种数据库的程序集:
             MySoft.Data.SQLite.dll(MySoft.Data.SQLite.SQLiteProvider)
             MySoft.Data.MySql.dll(MySoft.Data.MySql.MySqlProvider)
             MySoft.Data.FireBird.dll(MySoft.Data.FireBird.FireBirdProvider)

      增加与更新数据

public void Add(Message pMessage)
{
       _DbSession.Save(pMessage)
}

将实体保存到数据库,MySoft.Data提供了Save这个泛型方法,可直接将数据插入到数据库。另外,如果你想更新某个实体(注意,不是更新某几个字段),也可以用这个泛型方法。但这里要分几种情况:
      1、首先从数据库取出实体,然后对实体的属性赋值,再更新,调用Save方法就可以成功的更新赋值属性对应的字段,如果实体上没有任何属性赋值,则MySoft.Data认为这是一个异常。
      2、如果你的实体是新实例化的,则在调用Save之前,首先调用实体的Attach属性,这样才能更新成功,否则当插入数据处理。

public void Update(Message pMessage)
{
      pMessage.Attach();
      _DbSession.Save(pMessage);
}

回头看看实体内部,每个属性的setter都有一个特别的方法:
      this.OnPropertyValueChange(_.GuestName, _GuestName, value);
      这是一个很好的处理,表示只有当给实体属性赋值过的字段,才会更新到数据库。但如果你调用过Attach,则无论是否有更改,所有字段都会被更新。对于增加与修改数据,你还可以使用Insert 和 Update 方法,这些方法可以方便的插入与更新指定字段。

删除数据

删除数据比较简单,调用DbSession的Delete即可:

public void Delete(Message pMessage)
{
     _DbSession.Delete(pMessage);
}

另外,Delete也可以支持传入一个WhereClip子句,WhereClip的语法比较简单,比如我要删除GuestName为benking且留言时间小于2009-10-1的数据:

_DbSession.Delete( Message._.GuestName == "benking" && Message._.AddTime < DateTime.Parse("2009-10-1") );

注意,子句中“_”是实体里的内部类,这个类专门用于SQL语句的构建。

查询数据

查询数据的方法就有很多了,本例中我们只用到了返回IList列表以及查询单个实体的方法:

public Message Get(Int32 pID)
{
      return _DbSession.Get(Message._.ID == pID);
}

public IList GetList()
{
      return _DbSession
            .From()
            .OrderBy(Message._.AddTime.Desc)
            .ToList();
}

public IList GetList(Int32 pPageIndex, Int32 pPageSize)
{
       return _DbSession
            .From()
            .OrderBy(Message._.AddTime.Desc)
            .GetPage(pPageSize)
            .ToList(pPageIndex);
}

public IList GetList(Int32 pTop)
{
      return _DbSession
            .From()
            .OrderBy(Message._.AddTime.Desc)
            .SelectTop(pTop)
            .ToList();
}

可以看看这一组GetList方法,基于方法模式的MySoft.Data在数据库操作时的语法结构是非常清晰的,而且通俗易懂。采用快速反射,执行效率绝对没有问题。
      由于篇幅原因,具体细节我这里就不再叙述了,有兴趣的朋友可以到官方网站下载一个MySoft.Data试试

MySoft.Data官方论坛

嘿,不小心把篇幅弄得太长,今天到此打住。

原文:http://www.dsjian.com/10002/0027

转载于:https://www.cnblogs.com/Benking/archive/2009/10/05/1580035.html

MySoft.Data入门篇:编写业务逻辑相关推荐

  1. MySoft.Data入门篇:实体生成

    上一篇做了一些准备工作,包括创建数据库.项目等,介绍了MySoft.Data.本篇会介绍如何利用MySoft.Data附带的工具生成实体,并简单介绍一下对实体结构的看法. MySoft.Data的实体 ...

  2. 入门篇(二)模型:逻辑回归(一步步从原理到实现)

    <老饼讲解机器学习>专注于机器学习的学习网站http://ml.bbbdata.com/teach#187 目录 一.问题 二.逻辑回归的思想 三.模型表达式 四.损失函数 (一) 单个 ...

  3. 一文带你学习DDD,基础入门篇

    系统讲解DDD的基础概念,结合具体的Demo讲解DDD落地场景. 往期精选(欢迎转发~~) 如何看待程序员35岁职业危机? Java全套学习资料(14W字),耗时半年整理 我肝了三个月,为你写出了GO ...

  4. 1、SpringCloud入门篇,综合概述

    SpringCloud 微服务概述 什么是微服务 目前的微服务并没有一个统一的标准,一般是以业务来划分 将传统的一站式应用,拆分成一个个的服务,彻底去耦合,一个微服务就是单功能业务,只做一件事. 与微 ...

  5. 细说业务逻辑 -- 丢失的业务逻辑层

    前言 记得几个月前,在一次北京博客园俱乐部的活动上,最后一个环节是话题自由讨论.就是提几个话题,然后大家各自加入感兴趣的话题小组,进行自由讨论.当时金色海洋同学提出了一个话题--"什么是业务 ...

  6. 制定统一业务逻辑基础规则

    在系统开发前都会制定代码编写规则,这样能够很好的规范系统代码编写,提高代码可阅读性和可维护性.同样在编写业务逻辑上自己也会定义基础处理规则,这样就能够清楚明确系统中所有业务逻辑的处理过程(主要也是方便 ...

  7. 如何绘制逻辑图 — 7.逻辑的表达:业务逻辑

    前4 篇介绍完了逻辑图三元素中"要素"的表达方式,下面要介绍逻辑图三元素之二"逻辑"的表达方式.逻辑表达的说明分为两篇,第一篇说明"业务逻辑" ...

  8. P12:Redux进阶-将组件UI和业务逻辑进行拆分

    Redux 进阶 阐述 拆分UI组件 TodoList.js 文件的修改 UI组件和业务逻辑组件的整合 demo 项目目录 demo01\src\index.js demo01\src\TodoLis ...

  9. Service业务逻辑层

    就是功能实现 例:Account类要求编写业务逻辑层AccountServiceImpl类实现一个转账功能 先定义DBUtils类封装数据库连接代码.定义Account类.定义PersonDao类提供 ...

  10. JSON数据结构(A、快速入门篇)(Yanlz+Data+JsonArray+JsonObject+JsonValue+JsonMapper.ToJson+JsonMapper.ToObject+)

    <JSON数据结构> 版本 作者 参与者 完成日期 备注 Data_JSON_V01_1.0 严立钻 2018.08.24 ++++一个好用的JSON在线编辑:http://www.kjs ...

最新文章

  1. 干货!仅有 100k 参数的高效显著性检测方法
  2. Another MySQL daemon already running with the same unix socket的解决
  3. 开源:推荐一个不错的离线IP地址定位库
  4. 【图像分割模型】感受野与分辨率的控制术—空洞卷积
  5. SQL with(unlock)与with(readpast) (转)
  6. “蚂蚁牙黑”太火,想玩就用ModelArts做一个!
  7. 总结C++中取成员函数地址的几种方法
  8. linux 安装 maven
  9. 尚学堂马士兵hibernate讲义
  10. 特此感谢!酷睿12、希捷硬盘、机械键盘……免费送大家
  11. 爬虫——bs4测试——test.html
  12. 易签到PHP源码,会议签到系统(会易签到)应用项目源码
  13. kafka学习(六)
  14. linux pam mysql,Linux-PAM PAM-MySQL的总结
  15. 【物联网】三大厂家NB-IOT卡对比
  16. oracle OEM 13C for linux
  17. 软测之黑白盒登录测试
  18. 让父母轻松享受智能生活 天猫精灵新品全测评
  19. 使用EasyExcel导入表格实现xlsx文件批量插入-----linux的mysql
  20. NFS共享存储服务介绍与案例详细配置过程

热门文章

  1. js百度地图小车html,百度地图web开发(基于javascript)
  2. 解决anaconda与pycharm冲突导致import无法使用
  3. php imagick下载,PHP安装imagemagick扩展imagick
  4. Hibernate.cfg.xml 整理
  5. RedisTemplate 概述 与 操作 Redis 5 种数据类型
  6. @RequestMapping、@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping详解
  7. java socket 客户端接收_java socket,怎么把客户端接收到的用户名和密码发送给后台?...
  8. centos7安装便捷小工具命令
  9. Linux第九周作业
  10. C# WPF DataGrid在Grid中自适应窗体大小