您的位置:首页 > 其它

Castle ActiveRecord学习笔记四:各种映射

2011-10-23 13:03 441 查看
这里主要来说明ActiveRecord的属性与数据库及其字段的对应关系。

主要以ActiveRecordAttribute、PrimaryKeyAttribute、PropertyAttribute来进行说明。

首先,对于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

指定一个附加SQL的Where子句

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, Sybase和HypersonicSQL的内置标识字段提供支持,生成自增的整型

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

表明在用于INSERT的SQL语句中是否包含这个字段。默认为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);
}
}
}


通过上面的映射,就可以使用了。具体的还有FieldAttribute,CompositeKeyAttribute,留待研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: