Perst的“关系型数据库封装”

嘎子 面向对象数据库 2017-01-07 949 次浏览 , 没有评论

看到这个标题,大家可能会觉得很奇怪,Perst明明说是一个面向对象的数据库,为什么要有“关系型数据库封装”呢?像常见的程序一样,一般需要向下兼容,如果你之前精通关系型数据库的使用,那么用Perst的“关系型数据库封装”学习成本会非常小,快速上手。其实我就是这种情况,所以先试试“关系型数据库封装”,虽然程序看起来会有点别扭,但作为快速上手是非常不错的。

“关系型数据库封装”最核心的类就是Database类,之前已经写过一篇面向对象数据库Perst使用入门,里面就是用的Perst的“关系型数据库封装”,并且里面也介绍了Database这个类的基本功能,下面再就其方方面面作更详细的介绍:

1、使用“关系型数据库封装”,首先要获取Database的对象

2、索引。创建索引主要有两种方法,第一种是在类的代码中直接创建,也就是在类的属性之前类似代码[Indexable(Unique = true, CaseInsensitive = true)]。示例代码如下文所示:

还有一种方法是用Database的CreateIndex方法,示例代码如下:

这两方法各有自己的优势。但个人更推荐第二种方法,因为这种方法对类原有内容修改的更少,而让数据库操作更为集中。

3、事件。推荐所有的数据库操作都在事件中进行,这是一种更加安全的行为。

 

4、查询。主要是db.GetRecords(db.Select)和 query.Execute方法。这两种方法的本质上是一样的,都使用了一个类似于SQL的语言来进行查询,而Query是一个单独的查询类,可以使用占位符等,功能更强。而db.GetRecords(db.Select)使用起来更简洁。

当然,也可以和前文面向对象数据库Perst使用入门那样,使用db.GetRecords选取一个表格中所有的记录(这是一个比较笨的方法)。

实现上面相同的功能,使用Query的代码为:

但是这两种方法都有一个问题,那就是这些查询并不是类型安全的。比方说,我们在输入的时候不小心把name输成了nmae,编译器是发现不了错误的。想要解决此问题,就必须使用非“关系型数据库封装”的方法,这里不再详细说明,后续文章会再作介绍。

4、增加与修改。前文面向对象数据库Perst使用入门已经介绍了一种增加与修改的方法,就是使用db.AddRecord方法,查询出来之后修改然后再增加就可以。更加有效的做法是?db.GetRecords(db.Select) 时传入是否用于更新,然后更新后使用 Persistent.Modify()?方法通知数据库。

但如果我们需要更新索引所对应的属性,可能就会更麻烦一点。需要在更新之前先删除索引,更新之后再添加索引,这样才正确:

db.ExcludeFromIndex(dep, "name");和db.IncludeInIndex(dep, "name"); 就是删除、添加索引的过程。

6、删除。非常简单,直接给出代码。

好了,基本就这样了。关于查询中类似于SQL的语言被称作JSQL,更多可以参照Perst for .NET - Introduction and Tutorial的6.2节。

原创文章,文章首发于:Riley Ge (@rileyge) — Steemit

原创文章,转载请注明: 转载自TsonTec:测量解决方案提供者

本文链接地址: Perst的“关系型数据库封装”

相关主题

  • Perst工作基本方法与简单代码示例2017-01-08 Perst工作基本方法与简单代码示例 (0)
    昨天好好的看了一个关于Perst的工作方法,一下子对这一系列的文章就有了一个初步的打算了。除了这篇文章之外,可能还会写两篇文章,主要写“Perst的良好实践” […]
  • 面向对象数据库:Perst总结2017-01-11 面向对象数据库:Perst总结 (0)
    这几天写了不少关于Perst的东西,现在总结一下: 1、想学习一个新的面向对象数据库:Perst。在这时以为自己发现了新大陆,对Perst的期待还是挺高 […]
  • 面向对象数据库比较之Perst和db4o2017-01-10 面向对象数据库比较之Perst和db4o (6)
    自己是一个穷程序员,所以用的都是开源的,然后自己用的语言是C#,现在自己找到的两种面向对象的数据库就只有Perst和db4o,自己对这两种数据库也只是简单的试 […]
  • 面向对象数据库Perst使用入门2017-01-07 面向对象数据库Perst使用入门 (0)
    我比较热忠于面向对象数据库的原因是使用面向对象数据库时对数据的存储不需要编写(或编写量很小)额外代码来进行数据的存储及读取。特别是在很多情况下存储与读取的数据 […]
  • 想学习一个新的面向对象数据库:Perst2017-01-05 想学习一个新的面向对象数据库:Perst (0)
    Perst大家可能并没怎么听说过,不过这个数据库和eXtremeDB关系还是比较密切的。具体什么关系自己还真不太清楚,毕竟自己没怎么用过eXtremeDB,没 […]
  • DB4O在进行更新时只能在同一个session中的问题及改进方法2016-07-07 DB4O在进行更新时只能在同一个session中的问题及改进方法 (2)
    之前总是发现DB4O的好,但今天在使用DB4O的时候时候发现了一个非常大的不完善的地方,那就是如果要更新数据库,那么就必须在同一个session。在数据库中s […]

说点什么

您将是第一位评论人!

提醒
avatar
回顶部