zoukankan      html  css  js  c++  java
  • Castle ActiveRecord学习笔记四:各种映射

    这里主要来说明ActiveRecord的属性与数据库及其字段的对应关系。

    主要以ActiveRecordAttributePrimaryKeyAttributePropertyAttribute来进行说明。

    首先,对于ActiveRecordAttribute来说,是指定数据库表名与类之间进行映射的,如果表名和类名一致,

    则可以直接通过  [ActiveRecord] ,但是如果数据库表名与类名之间不一致,则可以显式的进行指定:比如类名为OrderInfo,而数据库表名为Order,则对应的关系可以通过[ActiveRecord("Order")]来进行指定。

    ActiveRecordAttribute说明:

    属性

    说明

    示例

    Table

    指定持久化类所对应的数据库表名,如果表名与类名相同,可以省略

    [ActiveRecord("Blogs")]

    [ActiveRecord(Table="Blogs")]

     

    Schema

    指定Schema的名字

    Schema="ARDemo"

    Proxy

    指定一个接口,在延迟装载时作为代理使用

     

    DiscriminatorColumn

    识别器的字段名

    DiscriminatorColumn="Blog"

    DiscriminatorType

    识别器的字段类型

    DiscriminatorType="String"

    DiscriminatorValue

    识别器字段的值

     

    Where

    指定一个附加SQLWhere子句

    Where="IsPost = 0"

    Lazy

    指定是否延迟加载

    Lazy=true|false

     注意,里面的延迟加载问题,我在前面的文章中有过讨论。

     

    其次就是PrimaryKeyAttribute属性的使用。这个从字面的意思上来看,就是指主键类型的。在一个表结构中,如果要指定主键,则可以使用这个属性名称来进行约束。          比如如果现有一个OrderID为主键,则可以这样的显示指定[PrimaryKey("OrderID")]或者[PrimaryKey(PrimaryKeyType.Identity,"OrderID")],但是如果这个字段和数据库的字段名称相同的话,直接可以隐式的来进行指定:[PrimaryKey],具体详细信息,请见下表:

    PrimaryKeyAttribute说明

    属性

    说明

    示例

    PrimaryKeyType

    主键生成的方式,如果不指定,则默认的方式为PrimaryKeyType.Native

    PrimaryKeyType.Native

    Column

    主键字段名称,如果跟属性名相同,可以不用指定

    PrimaryKey("blog_id")

    ColumnType

    主键字段的类型

     

    Generator

    是一个.NET类的名字,用来为该持久化类的实例生成唯一的标识。

     

    Params

    Params来提供Generator所需要的配置参数或初始化参数

     

    Length

    主键字段的长度

    Length=10

    SequenceName

    当指定主键的生成方式为Sequence时,序列的名称

    PrimaryKey(PrimaryKeyType.Sequence, SequenceName="myseqname")

    UnsavedValue

    用来标志该实例是刚刚创建的,尚未保存。

     

    主键的生成方式介绍

    名称

    说明

    Identity

    DB2,MySQL, MS SQL Server, SybaseHypersonicSQL的内置标识字段提供支持,生成自增的整型

    Sequence

    序列,对DB2,MySQL, PostgreSQL, Oracle的内置标识字段提供支持,生成自增的整型。

    HiLo

    高低位,使用一个高/低位算法来高效的生成Int64, Int32 或者 Int16类型的标识符。

    SeqHiLo

    使用序列的高低位,使用一个高/低位算法来高效的生成Int64, Int32 或者 Int16类型的标识符,给定一个数据库序列(sequence)的名字。

    UuidHex

    用一个System.Guid和它的ToString(string format)方法生成字符串类型的标识符。

    UuidString

    用一个新的System.Guid产生一个byte[] ,把它转换成字符串。

    Guid

    用一个新的System.Guid 作为标识符。

    GuidComb

    Jimmy Nilsso的一个算法产生一个新的System.Guid

    Native

    根据底层数据库的能力选择 identity, sequence 或者 hilo中的一个。默认值。

    Assigned

    让应用程序在自己为对象分配一个标示符。

    Foreign

    使用另外一个相关联的对象的标识符。

     

    最后就是要说的是PropertyAttribute,这个主要是表中的字段和类中的字段进行对应的,和前面一样,如果表字段名称和类字段名称一致,则可以直接利用[Property]来指定,否则需要利用[Property("OrderName")]来进行指定:

    说明

    属性

    说明

    示例

    Column

    对应的数据库字段名

    Property("blog_name")

    ColumnType

    对应的字段类型

     

    Formula

    一个SQL表达式,定义了这个计算(computed属性的值。计算属性没有和它对应的数据库字段。

     

    UnsavedValue

    用来标志该实例是刚刚创建的,尚未保存。

     

    Length

    字段的长度

    Length=10

    NotNull

    是否可以为空

    NotNull=true|false

    Unique

    是否允许重复

    Unique=true|false

    Update

    表明在用于UPDATE SQL语句中是否包含这个字段。默认为true

    Update=true|false

    Insert

    表明在用于INSERTSQL语句中是否包含这个字段。默认为true

    Insert=true|false

    下面是一个具体的例子:

    数据库:

     

    USE [NewsDemo]
    GO

    /****** Object: Table [dbo].[Order] Script Date: 10/23/2011 12:59:40 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    CREATE TABLE [dbo].[Order](
    [OrderID] [int] IDENTITY(1,1) NOT NULL,
    [OrderName] [nvarchar](50) NULL,
    CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED
    (
    [OrderID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

    代码:

     

    using Castle.ActiveRecord;
    using System.Collections;

    namespace CastleLib
    {
    [ActiveRecord("Order")]
    public class OrderInfo:ActiveRecordBase
    {

    private int _OrderId;
    private string _OrderName;

    [PrimaryKey(PrimaryKeyType.Identity,"OrderId")]
    public int OrderId
    {
    get { return _OrderId; }
    set { _OrderId = value; }
    }

    [Property("OrderName")]
    public string OrderName
    {
    get { return _OrderName; }
    set { _OrderName = value; }
    }

    public static void DeleteAll()
    {
    DeleteAll(typeof(OrderInfo));
    }

    public static IList FindAll()
    {
    return (IList)FindAll(typeof(OrderInfo));
    }

    public static OrderInfo Find(int id)
    {
    return (OrderInfo)FindByPrimaryKey(typeof(OrderInfo), id);
    }
    }
    }



    通过上面的映射,就可以使用了。具体的还有FieldAttributeCompositeKeyAttribute,留待研究。

     

  • 相关阅读:
    python-Lock进程同步解决互斥
    python-Event事件处理进程同步
    python-queue队列通信
    python-无名管道进程通信
    python-signal
    python-购物车
    python-多进程类封装
    python-哈夫曼树
    python-双向链表
    openstack 开发step-by-step
  • 原文地址:https://www.cnblogs.com/scy251147/p/2221718.html
Copyright © 2011-2022 走看看