惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - Benking

xpress 增开QQ群 实现完全脱离MySoft.Data引用的实体 xpress 2.1.0 beta 发布,包含源代码 DsJian正式更名为Xpress DsJian2.1 抢先预览(ASP.NET MVC 开源博客) ASP.NET MVC 开源博客 Google Docs 支持“目录分享” 对模板 Minyx2_Lite 的一点建议 ASP.NET MVC 2 Preview 2 发布 “潜伏”的长假 MySoft.Data入门篇:实体生成 我们需要更多人性化 Google Frame:IE也许应支持Webkit MySoft.Data入门篇:准备工作 披上 WordPress 的外衣 继续,信仰 切忌轻易对大用户量产品动大手术 唐僧师徒成功的关键要素 小故事:在缺陷中发现长处
MySoft.Data入门篇:编写业务逻辑
Benking · 2009-10-05 · via 博客园 - Benking

2009-10-05 01:15  Benking  阅读(1543)  评论()    收藏  举报

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