MySoft.Data入门篇:编写业务逻辑
2009-10-05 01:15 Benking 阅读(1520) 评论(1) 编辑 收藏 举报接下来要讲讲用MySoft.Data实现数据库业务逻辑,你会发现,用MySoft.Data操作数据库非常简单。在GuestBook这个示例中,我们会实现简单的数据库操作,如增、删、改、查询等。在之前,首先认识一下DbSession。这是 MySoft.Data的数据库操作会话对象,是所有数据库操作的入口。就是说在进行数据库操作时,首先要实例化一个DbSession对象,实例化的方式如下:
DbSession _DbSession
{
get { return new DbSession("GuestBook"); }
}
其中"GuestBook"是你在Web.Config的connectionStrings配置节中配置的数据库连接字符串name:
providerName 根据自己的数据库类型,配置不同的数据库驱动,MySoft.Data中集成了如下数据库驱动:<connectionStrings> <add name="GuestBook" connectionString="Server=.;Database=GuestBook;Uid=sa;Pwd=benking" providerName="MySoft.Data.SqlServer9.SqlServer9Provider"/> </connectionStrings>
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试试
嘿,不小心把篇幅弄得太长,今天到此打住。
原文:http://www.dsjian.com/10002/0027