zoukankan      html  css  js  c++  java
  • Lily.Core组件介绍,第一讲 实体的生成

    Lily.Core组件是在Vs2003+Sqlserver2000下的开发和进行测试的。
    Lily.Core组件是一个轻量级的和数据库打交道的并不是一个真正意义的是ORM组件。它只不是一多对或多对多的关系,必须靠手动维护各实体之间的关系。
    Lily.Core中的实体对应于数据库的一个表,一个视图或一段查询语句。
    Lily.Core对于事务的控制很弱,使用了Ado.Net中事务对象的传递来完成对事务的控制。
    Lily.Core的设计只是针对于SqlServer2000数据库,不对Access,Orcal,MySql等其它的数据库提供支持。

    好下面,我们看一个简单的例子:
    数据库中有表结构如下:
    IMA_物品
    3 物品编号 int 4 0
    0 物品名称 nvarchar 50 0
    0 物品型号 nvarchar 50 0
    0 单位 nvarchar 50 0
    0 生产厂家 nvarchar 50 0
    0 备注 nvarchar 50 0
    注:物品编号是自动增长字段,如果需要对实体对象进行添加,删除,更新必须要定义一个自动增长字段。


    一个数据表对应了一个描述数据表的实体类,对应一实体的容器,对应一操作实体的对象。
    假设置我们在IMA_物品表中:物品名称+物品型号+生产厂家不能存在有相同的记录,生成的实体对象如下:
      1Imports Lily
      2Imports Lily.Core
      3Imports System.ComponentModel
      4Public Class IMA_物品
      5    Inherits EntityBase
      6类实例化
     11实体字段描述
     86实体属性
    173设置实体的属性
    195获取实体的属性
    217实体其它属性
    240End Class

    241
    实体的容器:
     1Imports lily
     2Imports lily.core
     3Public Class IMA_物品_Container
     4    Inherits EntityContainer
     5    Public Sub New()
     6        MyBase.New()
     7    End Sub

     8    Public Sub New(ByVal operate As IMA_物品_Operate)
     9        MyBase.New(operate)
    10    End Sub

    11    Public Shadows Function Add(ByVal entity As IMA_物品) As Integer
    12        Return MyBase.Add(entity)
    13    End Function

    14    Default Public Shadows Property Item(ByVal index As IntegerAs IMA_物品
    15        Get
    16            Return MyBase.Item(index)
    17        End Get
    18        Set(ByVal Value As IMA_物品)
    19            MyBase.Item(index) = Value
    20        End Set
    21    End Property

    22    Public Shadows Function IndexOf(ByVal value As IMA_物品) As Integer
    23        Return MyBase.IndexOf(value)
    24    End Function

    25    Public Shadows Sub Insert(ByVal index As IntegerByVal value As IMA_物品)
    26        MyBase.Insert(index, value)
    27    End Sub

    28    Public Shadows Sub Remove(ByVal value As IMA_物品)
    29        MyBase.Remove(value)
    30    End Sub

    31    Public Shadows Sub AcceptChanges(ByVal entityhandler As IMA_物品_Operate)
    32        MyBase.AcceptChanges(EntityHandler)
    33    End Sub

    34End Class

    实体的操作类
     1Imports lily
     2Imports lily.core
     3Public Class IMA_物品_Operate
     4    Inherits EntityHandler
     5公共方法
    17重写基类方法
    39End Class

    好,我们现在就完成了对于一个数据库的映射操作。当然这些代码是通过一个简单的代码生成器完成的。

    第一步:获取系统中所有的IMA_物品表的记录


           
    Dim o As New IMA_物品_Operate
           
    Dim en As New IMA_物品
            
    Dim ec As IMA_物品_Container = o.GetEntityContainer(Lily.Core.SQL.Select().From(en))

            
    '有时我们并不想在表格里显示所实体对象的所有列,则需要加下以下这段代码
            '产生的结果是只有“物品名称”,“物品型号”,“单位”,“生产厂家”才在DataGrid中显示
            ec.BindList.Add(en._物品名称)
            ec.BindList.Add(en._物品型号)
            ec.BindList.Add(en._单位)
            ec.BindList.Add(en._生产厂家)


            
    Me.DataGrid1.DataSource = ec

    通过上面的语句,我们就可以IMA_物品所有的对象绑定到了DataGrid控件,可以进行编辑,删除,排序,就像把DataTable对象绑室DataGrid一样。当然没有DataTable强大。

    绑定到了DataGrid我们就可进行日常的编辑操作,当编辑完成后我们就需要进行提交操作,下面的代码演示了如何把实体对象保存到数据库
           If Not Me.DataGrid1.DataSource Is Nothing AndAlso TypeOf Me.DataGrid1.DataSource Is IMA_物品_Container Then
                
    Dim ec As IMA_物品_Container = CType(Me.DataGrid1.DataSource, IMA_物品_Container)
                
    Dim o As New IMA_物品_Operate
                ec.AcceptChanges(o)
            
    End If

    通过调用容顺的AcceptChanges方法自动完成了对实体对象的更新,删除,添加。
    (这也要求每个数据表必须要有自动增长字段的原因。由于是离线操作,如果需要处理更新,删除影响的行数等于0或强制更新,需要手动添加代码进行控制。)

    由于我们并没有在数据表中对 物品名称,物品型号,生产厂家设置联合主键,但又要求不允许存在有重复的记录所以在生成实体的字段后需要设置期实体字段的属性Uniqe=True.这样才进行更新和添加时组件会自动检查是否存在有重复的记录,如果存在有重复的记录将抛出异常。

    下面是介绍如何设置实体的联合主键.最后一个参数设为True就代表当前实体存在有联合主键。

        <Browsable(False)> _
        
    Public Overridable ReadOnly Property _物品名称() As IEntityField
            
    Get
                
    If f_物品名称 Is Nothing Then
                    f_物品名称 
    = CoreFactory.GetEntityField(Me"物品名称""物品名称"FalseFalse, DbType.String, 50True)
                
    End If
                
    Return f_物品名称
            
    End Get
        
    End Property


    总结:此小节主要是介绍了如何把一个数据表转换为一个实体对象,并简单的介绍了如何获取多个实体并绑定和如何更新到数据库。下一节,将介绍如何添加,更新,删除,查询实体对象。

  • 相关阅读:
    清除图片周围的空白区域
    试题识别与生成
    需要继续研究
    工作中的必要举措
    教学云平台要求的硬件配置
    处理程序安装部署标准流程
    Node.js 回调函数
    git 学习
    在 Selenium 中让 PhantomJS 执行它的 API
    RF常用库简介(robotframework)
  • 原文地址:https://www.cnblogs.com/zqonline/p/594533.html
Copyright © 2011-2022 走看看