代码改变世界

MySoft.Data入门篇:编写业务逻辑

2009-10-05 01:15 by Benking, ... 阅读, ... 评论, 收藏, 编辑

      接下来要讲讲用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