基于.NET的轻量级ORM框架及数据库工具集(一)

基于.NET的轻量级ORM框架及数据库工具集DBHELPER2

在.NET环境下,如果你不喜欢使用NHibernate或Entity Framewor等重量级的ORM框架,可以试用一下我开发的轻量级ORM框架DBHelper2。它有以下几个特点:

一、功能简介

  • 实现轻量级ORM框架,提供简单对象(对象属性为简单数据类型)与关系型数据库单表映射的功能。
  • 配置简单,所有与ORM相关的配置都是直接在类定义中加上"特性"attribute来实现的,不需要在源代码以外增加配置文件。
  • 提供了一系列简化数据库操作的实用方法。
  • DBHelper2支持多种数据库,它提供的方法与具体数据库类型无关,使用不同的数据库写出来的代码是一样的。要改变数据库时只需要改变数据库连接串即可。
  • 专门为Informix数据库在.NET环境下中文处理出现乱码的问题提供了内置解决方案。
  • 除了可以处理单个对象实例外,还可以处理对象集合。

二、使用方法

  • 下载JiangNong.DBHelper2.DLL文件,引用到你的项目中。
  • 使用静态方法dbfactory创建一个dbhelper对象,全部方法都封装在dbhelper对象之中。dbfactory创建对象是依赖于数据库连接串,所以,如果之后来改变数据库,只需要改变数据库连接串即可
'使用DBFactory创建DBHelper实例
'指定数据库连接串,根据连接串的providerName来确定数据库类型,默认为SQLSERVER
Using db AsDBHelper = DBFactory.CreateDBHelper("ConnectionString")
         
EndUsing
  • 其中ConnectionString是配置文件(web.config或app.config)中的数据库连接串名称,连接串中的providerName来决定使用哪一种类型的数据库。
<!--
     演示数据库连接串
     DBHelper2可以默认调用name="ConnectionString"的连接串。
     如果省略providerName,默认为SQLHelper
-->
<add name="ConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=AdventureWorks2012_Data.mdf;Integrated  Security=True;"/>

三、简单示例

如下所示的代码是从数据库的Person.Person表中读取一个记录,该记录被映射到Person类的实例。

  • 首先,需要定义Person类,并指明映射的表、主键等信息
Imports  JiangNong.DBHelper2
 
'''<summary>
'''定义映射到数据库的类
'''</summary>
<TableMapping(Table:="Person.Person")> Public Class Person
     Inherits BusinessEntity
     <ColumnMapping(PrimaryKey:=True, Identity:=False)> Public Overloads Property  BusinessEntityID As Integer
 
     Public Property PersonType As String
     Public Property NameStyle As Boolean
     Public Property Title As String
     Public Property FirstName As String
     Public Property MiddleName As String
     Public Property LastName As String
     Public Property Suffix As String
     Public Property EmailPromotion As Integer
     Public Property AdditionalContactInfo As String
     Public Property Demographics As String
End Class
 
 
<TableMapping(Table:="Person.BusinessEntity")>
Public Class BusinessEntity
   <ColumnMapping(PrimaryKey:=True, Identity:=True)> Public Property  BusinessEntityID As Integer
   Public Property rowguid As Guid = Guid.NewGuid
   Public Property ModifiedDate As DateTime = Now
End Class
  • 然后通过load方法从数据库中读取对象的值,读取数据之前先给对象赋一个主键值。
'创建DBHelper实例
Using db As DBHelper = DBFactory.CreateDBHelper
    '创建一个数据对象,赋给一个主键值
    Dim p As New Person With {.BusinessEntityID = 10}
    '使用Load方法,默认按照主键值从数据库装载记录
    If db.Load(p) Then
        appendText(p)
    Else
        appendText("Person not found.")
    EndIf
EndUsing


''' <summary>
''' 显示信息
''' </summary>
''' <param name="message"></param>
Private Sub appendText(message As String)
    txtResult.AppendText(message & vbCrLf)
End Sub

Private Sub appendText(p As Person)
    appendText(String.Format("First Name:{0}, Last Name:{1}, Person Type:{2}, rowguid:{3}, ModifiedDate:{4:yyyy-MM-dd}.", p.FirstName, p.LastName, p.PersonType, p.rowguid, p.ModifiedDate))
End Sub

Private Sub appendText(r As DataRow)
    appendText(String.Format("First Name:{0}, Last Name:{1}, Person Type:{2}, rowguid:{3}, ModifiedDate:{4:yyyy-MM-dd}.", r("FirstName"), r("LastName"), r("PersonType"), r("rowguid"), r("ModifiedDate")))
End Sub
  • 使用save方法保存对象的值。根据主键的值关断,如果数据库中存在该记录,则save相当于update,如果不存在,save相当于insert
'创建DBHelper实例
 Using db As DBHelper = DBFactory.CreateDBHelper
         '由于需要保存两个对象,需要将两个Save方法放在一个事务中
         db.BeginTransaction()
         Try
             '创建主表对象,它含有一个自增字段(Identity)
             Dim b As New BusinessEntity
             '保存主表对象,自动生成的Insert语句中不包含自增字段
             db.Save(b)
             '从数据库获取自增字段的值
             Dim BusinessEntityID As Integer = getBusinessEntityID(db)
             '构建附表对象,它的主键值必须与主表对象一致
             Dim p As New PersonWith {
                    .BusinessEntityID =  BusinessEntityID,
                    .PersonType = "SC",
                    .FirstName = "Cougar",
                    .LastName = "Jiang"}
             '保存附表对象
             db.Save(p)
             '提交事务
             db.CommitTransaction()
             appendText("Save Record OK.")
         Catch ex As Exception
             '如果发生错误回滚事务
             db.RollbackTransaction()
             appendText("Save Record Error: " &  ex.Message)
         End Try
 End Using
  • 使用Remove方法删除记录,事先给对象主键值。
'创建DBHelper实例
Using db As DBHelper = DBFactory.CreateDBHelper
    '创建一个对象,并赋值给非主键字段
    Dim p As New Person With {.FirstName = "Cougar", .LastName = "Jiang"}
    '指定有值的字段为查询关键字,查询记录
    If db.Load(p, {"FirstName", "LastName"}) Then
        appendText("No record to be removed.")
        Exit Sub
    End If
    '获得了主键值,按照主键来操作
    Dim b As New BusinessEntity With {.BusinessEntityID = p.BusinessEntityID}
    '开启事务
    db.BeginTransaction()
    Try
        '删除附表对象
        db.Remove(p)
        '删除主表对象
        db.Remove(b)
        '提交事务
        db.CommitTransaction()
        appendText("Record are removed.")
    Catch ex AsException
        '回滚事务
        db.RollbackTransaction()
        appendText("Remove Error: " &  ex.Message)
    End Try
End Using

源代码:https://github.com/alibary/DBHelper2.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值