日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Castle ActiveRecord学习实践(1):快速入门指南

發布時間:2025/7/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Castle ActiveRecord学习实践(1):快速入门指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要:最近幾天有時間看了一下Castle,原來它的功能是如此的強大,從數據訪問框架到IOC容器,再到WEB框架,基本包括了整個開發過程中的所有東西,看來得好好學習研究一下了,并且打算把自己學習過程的一些東西記錄下來。先從ActiveRecord開始吧,ActiveRecord提供的簡潔的O/R映射給我留下了很深的印象,本文將通過一個簡單對象的CRUD操作來帶你快速走進Castle ActiveRecord

主要內容

1.概述

2.準備相關的數據表

3.編寫User實體類

4.構建配置信息

5.開始CRUD操作

6.使用ActiveRecord Generator生成實體類代碼

?

一.概述

如果你用過NHibernate,一定會對在NHibernate中編寫.hbm.xml文件印象深刻,我也是。而在Castle ActiveRecord中,我們不用再為編寫繁冗復雜的映射文件而頭疼,ActiveRecordCastle中提供的一個數據訪問框架,它在底層封裝了NHibernate的操作,使用特性來代替映射文件,它提供的簡潔的O/R映射會讓你驚嘆原來實現持久化數據層是那么簡單。下面我們通過一個簡單對象的CRUD操作來快速進入Castle ActiveRecord

?

二.準備相關的數據表

假定數據庫中有這樣一張用戶表,用來保存用戶的信息,如下

CREATE?TABLE?[dbo].[Users]?(
????
[LogonID]?[int]?IDENTITY?(1,?1)?NOT?NULL?,
????
[LogonName]?[varchar]?(40)?COLLATE?Chinese_PRC_CI_AS?NULL?,
????
[Password]?[varchar]?(20)?COLLATE?Chinese_PRC_CI_AS?NULL?,
????
[EmailAddress]?[varchar]?(40)?COLLATE?Chinese_PRC_CI_AS?NULL?,
????
[LastLogon]?[datetime]?NULL?
)?
ON?[PRIMARY]
GO


三.編寫User實體類

首先我們新建一個User類并讓它繼承于ActiveRecordBase

public?class?User?:?ActiveRecordBase

{

????
//

}


User類添加特性,其實就是告訴ActiveRecordUser類所對應的數據庫中的數據表名為Users

[ActiveRecord("Users")]
public?class?User?:?ActiveRecordBase
{
????
//
}


下面我們的工作就是為實體類添加屬性

[ActiveRecord("Users")]
public?class?User?:?ActiveRecordBase
{
????
private?int?_id;

????
private?string?_name;

????
private?string?_password;

????
private?string?_emailAddress;

????
private?DateTime?_lastLogon;

????[PrimaryKey(PrimaryKeyType.Identity,?
"LogonID")]
????
public?int?Id
????
{
????????
get?{?return?_id;?}
????????
set?{?_id?=?value;?}
????}

????
????[Property(
"LogonName")]
????
public?string?Name
????
{
????????
get?{?return?_name;?}
????????
set?{?_name?=?value;?}
????}

????
????[Property(
"Password")]
????
public?string?Password
????
{
????????
get?{?return?_password;?}
????????
set?{?_password?=?value;?}
????}

????
????[Property(
"EmailAddress")]
????
public?string?Address
????
{
????????
get?{?return?_emailAddress;?}
????????
set?{?_emailAddress?=?value;?}
????}

????
????[Property(
"LastLogon")]
????
public?DateTime?LastLogon
????
{
????????
get?{?return?_lastLogon;?}
????????
set?{_lastLogon?=?value;?}
????}

}


大家可能注意到了,每一個屬性上面都加上了特性[Property()]。簡單的說明一下,這里用[PrimaryKey]特性指定Id作為主鍵,并且說明了主鍵的類型為自增型的,用PrimaryKeyType.Identity來說明,在后續文章中我會詳細說明的。如果屬性名和字段名一致,[Property()]中可以為空,也可以寫上字段的名字。

下一步我們為實體類根據需要加上靜態的操作方法,至于Create()Update()Delete()Save()等方法則會直接從ActiveRecordBase基類中繼承

[ActiveRecord("Users")]
public?class?User?:?ActiveRecordBase
{
????
//……

????
public?static?void?DeleteAll()
????
{
????????DeleteAll(?
typeof(User)?);
????}


????
public?static?IList?FindAll()
????
{
????????
return?(IList)?FindAll(?typeof(User)?);
????}


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

}

?

整個完成后的實體類代碼

using?System;
using?System.Collections;
using?Castle.ActiveRecord;

namespace?ARDemo
{
????
/**////?<summary>
????
///?User?的摘要說明。
????
///?</summary>

????[ActiveRecord("Users")]
????
public?class?User?:?ActiveRecordBase
????
{
????????
private?int?_id;

????????
private?string?_name;

????????
private?string?_password;

????????
private?string?_emailAddress;

????????
private?DateTime?_lastLogon;

????????[PrimaryKey(PrimaryKeyType.Identity,?
"LogonID")]
????????
public?int?Id
????????
{
????????????
get?{?return?_id;?}
????????????
set?{?_id?=?value;?}
????????}

????????
????????[Property(
"LogonName")]
????????
public?string?Name
????????
{
????????????
get?{?return?_name;?}
????????????
set?{?_name?=?value;?}
????????}

????????
????????[Property(
"Password")]
????????
public?string?Password
????????
{
????????????
get?{?return?_password;?}
????????????
set?{?_password?=?value;?}
????????}

????????
????????[Property(
"EmailAddress")]
????????
public?string?Address
????????
{
????????????
get?{?return?_emailAddress;?}
????????????
set?{?_emailAddress?=?value;?}
????????}

????????
????????[Property(
"LastLogon")]
????????
public?DateTime?LastLogon
????????
{
????????????
get?{?return?_lastLogon;?}
????????????
set?{_lastLogon?=?value;?}
????????}


????????
public?static?void?DeleteAll()
????????
{
????????????DeleteAll(?
typeof(User)?);
????????}


????????
public?static?IList?FindAll()
????????
{
????????????
return?(IList)?FindAll(?typeof(User)?);
????????}


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

????}

}

?

四.構建配置信息

現在我們要告訴ActiveRecord相關的數據庫、數據驅動等信息,最簡單的就是使用配置文件

<?xml?version="1.0"?encoding="utf-8"??>
<configuration>
????
<configSections>
????????
<section?name="activerecord"?type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler,?Castle.ActiveRecord"?/>
????
</configSections>
????
<activerecord>
????????
<config>
????????????
<add?key="hibernate.connection.driver_class"?value="NHibernate.Driver.SqlClientDriver"?/>
????????????
<add?key="hibernate.dialect"?value="NHibernate.Dialect.MsSql2000Dialect"?/>
????????????
<add?key="hibernate.connection.provider"?value="NHibernate.Connection.DriverConnectionProvider"?/>
????????????
<add?key="hibernate.connection.connection_string"?value="UID=sa;Password=sa;Initial?Catalog=ARDemo;Data?Source=."?/>
????????
</config>
????
</activerecord>
</configuration>


用過NHibernate的朋友一定會對這段配置代碼很熟悉,沒錯,因為ActiveRecord在底層封裝了NHibernate,所以這里的配置跟使用NHibernate時的配置一樣,同樣是指定了數據源驅動,連接字符串等信息。如果使用了配置文件在代碼中只要這樣去初始化就可以了

IConfigurationSource?source?=?System.Configuration.ConfigurationSettings.GetConfig("activerecord")?as?IConfigurationSource;
ActiveRecordStarter.Initialize(?source,?
typeof(User)?);


我們也可以不使用配置文件,而使用代碼指定的方式,但是由于這種方式相當于硬編碼了,不大推薦大家使用這種方式:

InPlaceConfigurationSource?source?=?new?InPlaceConfigurationSource();

Hashtable?properties?
=?new?Hashtable();

properties.Add(
"hibernate.connection.driver_class",?"NHibernate.Driver.SqlClientDriver");
properties.Add(
"hibernate.dialect",?"NHibernate.Dialect.MsSql2000Dialect");
properties.Add(
"hibernate.connection.provider",?"NHibernate.Connection.DriverConnectionProvider");
properties.Add(
"hibernate.connection.connection_string",?"UID=sa;Password=19811218;Initial?Catalog=ARDemo;Data?Source=.");

source.Add(?
typeof(ActiveRecordBase),?properties?);

ActiveRecordStarter.Initialize(?source,?
typeof(User)?);

?

五.開始CRUD操作

好了,經過了前面的步驟之后,就可以正式開始我們的對象CRUD操作了。

1.增加User對象

[Test]
public?void?AddUser()
{
????User?user?
=?new?User();

????user.Name?
=?"Terrylee";
????user.Password?
=?"aaa";
????user.Address?
=?"lhj_cauc@163.com";
????user.LastLogon?
=?DateTime.Now;
????
????user.Create();
}


是不是非常簡單?我們甚至都沒有寫過Create()方法,它直接從ActiveRecordBase類繼承。我們所做的只是創建這樣一個User對象,然后調用它的方法就可以了。

2.查詢所有的User對象

[Test]
public?void?FildAll()
{
????IList?list?
=?User.FindAll();

????Assert.IsNotNull(list);

????
int?actual?=?list.Count;
????
int?expected?=?2;

????Assert.AreEqual(expected,actual);
}


3.查詢某一個指定IdUser對象

[Test]
public?void?Fild()
{
????
int?id?=?5;
????User?actual?
=?User.Find(id);

????Assert.IsNotNull(actual);
????Assert.AreEqual(
"Terrylee",actual.Name);
????Assert.AreEqual(
"aaa",actual.Password);
}


4.修改User對象

[Test]
public?void?UpdateUser()
{
????User?user?
=?new?User();

????user.Id?
=?5;
????user.Name?
=?"Aero";
????user.Password?
=?"aaa";
????user.Address?
=?"chwkai@163.com";
????user.LastLogon?
=?DateTime.Now;

????user.Update();
}


5.刪除User對象

[Test]
public?void?DeleteUser()
{
????User?user?
=?new?User();

????user.Id?
=?7;
????user.Delete();
}


6.刪除所有的User對象

[Test]
public?void?DeleteAll()
{
????User.DeleteAll();
}


可以看到,整個過程非常的簡潔簡單,沒有一點多余復雜的代碼,相信你已經開始體會到了ActiveRecord的魅力了。唯一有一點你會感到不舒服的是已經有了數據庫表還需要手工編寫實體類代碼,這個不用擔心,ActiveRecord已經為我們提供了代碼生成工具ActiveRecord Generator

六.使用ActiveRecord Generator生成實體類代碼

1.執行Castle.ActiveRecord.Generator.exe,位于目錄C:\Program Files\Castle\Bin\net-1.1\下面,可以看到如下界面,選擇Project Explorer面板

?

2.點擊“Add DataBase Connection”圖標,如下圖中紅色方框所示,彈出設置連接字符串對話框,我們首先要為數據庫起一個別名,這個名字可以跟數據庫名不一樣,在后面我們會用到

?

注意:如果連接數據庫為SQL Server2000數據庫,必須在彈出的對話框中選中允許保存密碼選項,否則點擊OK按鈕時會報登錄失敗的錯誤!這點不知道是不是我機器的設置問題,如果有朋友遇到這樣的錯誤,不妨一試。

?

3.點擊OK后,選擇ActiveRecord Components面板

?

?

?

4.拖動ActiveRecord到左邊的空白區域,會出現如下界面,選擇我們剛才設置的數據庫別名

?

5.此后操作有選擇子段,設置類名等,全部完成后界面如下:

?

6.選擇Project菜單下的Generate Code,輸入命名空間,文件設置路徑,并選擇所要生成代碼語言

注意:有一個選項是否覆蓋已經存在的文件,可以根據自己的實際情況選擇

7.最后生成的完整實體類代碼如下

//?
//?Generated?by?ActiveRecord?Generator
//?
//
namespace?ARDemo
{
????
using?Castle.ActiveRecord;
????
????
????[ActiveRecord(
"Users")]
????
public?class?User?:?ActiveRecordBase
????
{
????????
????????
private?int?_logonID;
????????
????????
private?string?_logonName;
????????
????????
private?string?_password;
????????
????????
private?string?_emailAddress;
????????
????????
private?System.DateTime?_lastLogon;
????????
????????[PrimaryKey(PrimaryKeyType.Native)]
????????
public?int?LogonID
????????
{
????????????
get
????????????
{
????????????????
return?this._logonID;
????????????}

????????????
set
????????????
{
????????????????
this._logonID?=?value;
????????????}

????????}

????????
????????[Property()]
????????
public?string?LogonName
????????
{
????????????
get
????????????
{
????????????????
return?this._logonName;
????????????}

????????????
set
????????????
{
????????????????
this._logonName?=?value;
????????????}

????????}

????????
????????[Property()]
????????
public?string?Password
????????
{
????????????
get
????????????
{
????????????????
return?this._password;
????????????}

????????????
set
????????????
{
????????????????
this._password?=?value;
????????????}

????????}

????????
????????[Property()]
????????
public?string?EmailAddress
????????
{
????????????
get
????????????
{
????????????????
return?this._emailAddress;
????????????}

????????????
set
????????????
{
????????????????
this._emailAddress?=?value;
????????????}

????????}

????????
????????[Property()]
????????
public?System.DateTime?LastLogon
????????
{
????????????
get
????????????
{
????????????????
return?this._lastLogon;
????????????}

????????????
set
????????????
{
????????????????
this._lastLogon?=?value;
????????????}

????????}

????????
????????
public?static?void?DeleteAll()
????????
{
????????????ActiveRecordBase.DeleteAll(
typeof(User));
????????}

????????
????????
public?static?User[]?FindAll()
????????
{
????????????
return?((User[])(ActiveRecordBase.FindAll(typeof(User))));
????????}

????}

}


大家還應該注意的一點是生成One-Many/Many-One等關系的實體類文件時可能會出現一些問題,需要對生成的代碼手工改動。最后希望和研究Castle的朋友能夠多多交流!

?

參考資料

Castle的官方網站http://www.castleproject.org

轉載于:https://www.cnblogs.com/Terrylee/archive/2006/04/03/365762.html

總結

以上是生活随笔為你收集整理的Castle ActiveRecord学习实践(1):快速入门指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日日撸夜夜撸 | 欧美成人高潮一二区在线看 | 国产性生活视频 | 中文字幕日韩欧美 | 亚洲一区二区三区婷婷 | 激情小说中文字幕 | 国产精品伦一区二区三级古装电影 | 天堂国产在线 | 日日撸夜夜操 | 欧美日本道 | 成人免费91 | 欧美视频网址 | 一区二区视频免费 | 制服一区 | 成人一级影片 | 国产乡下妇女做爰 | 黄网在线看 | 超碰在线观看91 | 青青草偷拍视频 | 精品无码久久久久成人漫画 | 自拍偷拍 国产 | 黄色av一级片 | 亚洲丁香色 | 国产成人97精品免费看片 | 色婷婷一区二区三区 | 日本国产网站 | 嫦娥性艳史bd | 天堂va蜜桃一区二区三区漫画版 | 贝利弗山的秘密在线观看 | 欧美一级在线播放 | 好男人在线视频 | 成年人在线观看网站 | 中文字幕.com | 欧美黄色网络 | 久久亚洲电影 | 电影寂寞少女免费观看 | 丁香伊人网 | 欧美一级高潮片 | 亚洲国产高清在线 | 日韩av高清 | 欧美激情一区二区三区蜜桃视频 | 欧美少妇性生活 | 草碰在线 | 天天干天天舔天天操 | 日本一区二区三区四区视频 | 狠狠综合久久av一区二区 | 国产午夜精品免费一区二区三区视频 | 日本啊啊视频 | 啪啪小视频网站 | chinese麻豆新拍video | 日本久久久久久久久久 | 激情四虎 | 国产精品午夜福利 | 国产精品人人爽 | 免费成人高清视频 | 日韩欧美一区在线 | 亚洲av无码专区国产乱码不卡 | 欧美精品一区二区免费 | 成人av图片 | 精品1区2区3区 | 久久99国产精品久久99 | 国产乱欲视频 | 国产精品久久久久精 | 特级a毛片| 国产精品久久婷婷 | 亚洲做受高潮 | 亚洲の无码国产の无码步美 | 蜜臀av在线观看 | 成人午夜影院 | 亚洲丝袜一区 | 欧美视频一区二区在线观看 | 先锋av资源在线 | 国产免费又黄又爽又色毛 | 免费av在线播放网址 | 污污网站免费在线观看 | 亚洲av成人片无码 | 丰满人妻一区二区三区无码av | 一区二区三区四区五区av | 日日夜夜精品视频 | 久久久网| 最新的黄色网址 | www.亚洲一区二区三区 | 色狠av| 人妖和人妖互交性xxxx视频 | 男人天堂av网站 | 日韩精品一区二区三区在线 | 国产午夜三级 | 久久在线播放 | 丁香七月婷婷 | 欧美影院久久 | 日韩精品v | 久久人妖| 在线免费视频一区二区 | 久久久久亚洲AV成人网人人小说 | 美女无遮挡免费网站 | 美女视频黄a视频全免费观看 | 大地资源高清播放在线观看 | 欧美色图激情 | 97伊人超碰 |