Castle学习之一:安装与环境设置
生活随笔
收集整理的這篇文章主要介紹了
Castle学习之一:安装与环境设置
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一步,當然是下載了。
我本來下載的是Castle RC2的MSI安裝文件,并通過SVN下載了Generator,但是安裝后發現了一些問題(主要是.net版本的問題),所以刪除了之后,從SVN下載了全部最新的代碼,然后用NAnt在.net 2.0環境下編譯。
具體操作:
1,安裝TortoiesSVN;
2,建立新目錄:D:\working\Castle.SVN\
3,右擊新建目錄的圖標,SVN CheckOut: http://svn.castleproject.org:8080/svn/castle/trunk/
(以下步驟參照下載下來的how to build.txt)
4,打開命令行,切換到D:\Working\Castle.SVN目錄,執行命令: nant -t:net-2.0(當然前提是安裝了NAnt)
這個過程比較長,持續了大約10分鐘左右.最后生成了一個新目錄: D:\working\Castle.SVN\build\net-2.0\debug .我們所需要引用的DLL就包含在這個目錄里了(哪位能說一下怎么生成.net 2.0下的Release版?).
5,在本地的Sql Server上建立兩個空數據庫test, test2
第二步,嘗試使用ActiveRecord.
這一步我基本上是跟著ActiveRecord Getting Started里的介紹在做,只不過沒有使用VS的項目模板:
1,在Visual Studio 2005里新建一個Class Library項目,添加對以下dll的引用: Castle.ActiveRecord, Castle.Core, Castle.DynamicProxy, log4net, NHibernate.
2,錄入代碼:
School.cs
?1?using?System;
?2?using?System.Collections.Generic;
?3?using?System.Text;
?4?using?Castle.ActiveRecord;
?5?
?6?namespace?BookStore.Components
?7?{
?8?????[ActiveRecord("book_School")]
?9?????public?class?School?:?ActiveRecordBase<School>
10?????{
11?????????Guid?_id;
12?????????string?_name;
13?
14?????????IList<TClass>?_classes?=?new?List<TClass>();
15?
16?????????[PrimaryKey(PrimaryKeyType.Guid)]
17?????????public?Guid?Id
18?????????{
19?????????????get?{?return?_id;?}
20?????????????set?{?_id?=?value;?}
21?????????}
22?
23?????????[Property]
24?????????public?string?Name
25?????????{
26?????????????get?{?return?_name;?}
27?????????????set?{?_name?=?value;?}
28?????????}
29?
30?????????[HasMany(typeof(TClass),?Inverse?=?true,?Cascade?=?ManyRelationCascadeEnum.AllDeleteOrphan)]
31?????????public?IList<TClass>?Classes
32?????????{
33?????????????get?{?return?_classes;?}
34?????????????set?{?_classes?=?value;?}
35?????????}
36?????}
37?}
38?
TClass.cs
?1?using?System;
?2?using?System.Collections.Generic;
?3?using?System.Text;
?4?using?Castle.ActiveRecord;
?5?
?6?namespace?BookStore.Components
?7?{
?8?????[ActiveRecord("book_class")]
?9?????public?class?TClass?:?ActiveRecordBase<TClass>
10?????{
11?????????Guid?_id;
12?????????string?_name;
13?????????int?_birthYear;
14?
15?????????School?_school;
16?
17?????????[PrimaryKey(PrimaryKeyType.Guid)]
18?????????public?Guid?Id
19?????????{
20?????????????get?{?return?_id;?}
21?????????????set?{?_id?=?value;?}
22?????????}
23?
24?????????[Property]
25?????????public?int?BirthYear
26?????????{
27?????????????get?{?return?_birthYear;?}
28?????????????set?{?_birthYear?=?value;?}
29?????????}
30?
31?????????[Property]
32?????????public?string?Name
33?????????{
34?????????????get?{?return?_name;?}
35?????????????set?{?_name?=?value;?}
36?????????}
37?
38?????????[BelongsTo("schoolId")]
39?????????public?School?School
40?????????{
41?????????????get?{?return?_school;?}
42?????????????set?{?_school?=?value;?}
43?????????}
44?????}
45?}
46?
由于個人更喜歡Guid類型的主鍵,所以沒有完全照搬教程的代碼,而是做了一些修改.
編譯,通過.好了,下一步寫點測試代碼吧.
Getting Started里用的是Winform,我順便改成了使用NUnit的測試.
SchoolTest.cs
?1?using?System;
?2?using?System.Collections.Generic;
?3?using?System.Text;
?4?using?NUnit.Framework;
?5?using?Castle.ActiveRecord;
?6?using?Castle.ActiveRecord.Framework.Config;
?7?using?BookStore.Components;
?8?
?9?namespace?BookStore.Tests
10?{
11?????[TestFixture]
12?????public?class?SchoolClass
13?????{
14?????????[TestFixtureSetUp]
15?????????public?void?SetUpAll()
16?????????{
17?????????????XmlConfigurationSource?source?=?new?XmlConfigurationSource("appconfig.xml");
18?
19?????????????ActiveRecordStarter.Initialize(source,?typeof(School),?typeof(TClass));
20?
21?????????????ActiveRecordStarter.CreateSchema();
22?????????????school?=?new?School();
23?????????????school.Name?=?schoolName;
24?????????????school.Create();
25?????????}
26?
27?????????School?school;
28?????????string?schoolName?=?"中國礦業大學(北京)";
29?
30?????????[Test]
31?????????public?void?Schools()
32?????????{
33?????????????Assert.AreEqual(1,?School.FindAll().Length);
34?????????????School?newSchool?=?School.Find(school.Id);
35?????????????Assert.AreEqual(school.Id,?newSchool.Id);
36?????????????Assert.AreEqual(schoolName,?newSchool.Name);
37?????????}
38?
39?????????[Test]
40?????????public?void?Classses()
41?????????{
42?????????????string?className="市場管理001班";
43?????????????TClass?theClass?=?new?TClass();
44?????????????theClass.Name?=?className;
45?????????????theClass.School?=?school;
46?????????????theClass.BirthYear?=?2000;
47?????????????theClass.Create();
48?
49?????????????Assert.AreEqual(1,?TClass.FindAll().Length);
50?????????????TClass?newClass?=?TClass.Find(theClass.Id);
51?????????????Assert.AreEqual(theClass.Id,?newClass.Id);
52?????????????Assert.AreEqual(className,?newClass.Name);
53?????????????Assert.AreEqual(schoolName,?newClass.School.Name);
54?????????????Assert.AreEqual(2000,?newClass.BirthYear);
55?????????}
56?
57?????????[TestFixtureTearDown]
58?????????public?void?TearDown()
59?????????{
60?????????????ActiveRecordStarter.DropSchema();
61?????????}
62?????}
63?}
64?
測試,OK!
需要注意的幾點:
1,ActiveRecord里主鍵默認是int類型,改成Guid之后,PrimaryKey屬性必須聲明為[PrimaryKey(PrimaryKeyType.Guid)],否則進行數據庫操作時會出錯.
2,ActiveRecord里主鍵不應該被賦值,即使賦值了添加到數據庫時也會因為重新生成主鍵而丟失.
3,這個版本的ActiveRecordStarter.CreateSchemaFromFile好像有點問題,執行后沒有任何效果,而且不報任何錯誤.
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
我本來下載的是Castle RC2的MSI安裝文件,并通過SVN下載了Generator,但是安裝后發現了一些問題(主要是.net版本的問題),所以刪除了之后,從SVN下載了全部最新的代碼,然后用NAnt在.net 2.0環境下編譯。
具體操作:
1,安裝TortoiesSVN;
2,建立新目錄:D:\working\Castle.SVN\
3,右擊新建目錄的圖標,SVN CheckOut: http://svn.castleproject.org:8080/svn/castle/trunk/
(以下步驟參照下載下來的how to build.txt)
4,打開命令行,切換到D:\Working\Castle.SVN目錄,執行命令: nant -t:net-2.0(當然前提是安裝了NAnt)
這個過程比較長,持續了大約10分鐘左右.最后生成了一個新目錄: D:\working\Castle.SVN\build\net-2.0\debug .我們所需要引用的DLL就包含在這個目錄里了(哪位能說一下怎么生成.net 2.0下的Release版?).
5,在本地的Sql Server上建立兩個空數據庫test, test2
第二步,嘗試使用ActiveRecord.
這一步我基本上是跟著ActiveRecord Getting Started里的介紹在做,只不過沒有使用VS的項目模板:
1,在Visual Studio 2005里新建一個Class Library項目,添加對以下dll的引用: Castle.ActiveRecord, Castle.Core, Castle.DynamicProxy, log4net, NHibernate.
2,錄入代碼:
School.cs
?1?using?System;
?2?using?System.Collections.Generic;
?3?using?System.Text;
?4?using?Castle.ActiveRecord;
?5?
?6?namespace?BookStore.Components
?7?{
?8?????[ActiveRecord("book_School")]
?9?????public?class?School?:?ActiveRecordBase<School>
10?????{
11?????????Guid?_id;
12?????????string?_name;
13?
14?????????IList<TClass>?_classes?=?new?List<TClass>();
15?
16?????????[PrimaryKey(PrimaryKeyType.Guid)]
17?????????public?Guid?Id
18?????????{
19?????????????get?{?return?_id;?}
20?????????????set?{?_id?=?value;?}
21?????????}
22?
23?????????[Property]
24?????????public?string?Name
25?????????{
26?????????????get?{?return?_name;?}
27?????????????set?{?_name?=?value;?}
28?????????}
29?
30?????????[HasMany(typeof(TClass),?Inverse?=?true,?Cascade?=?ManyRelationCascadeEnum.AllDeleteOrphan)]
31?????????public?IList<TClass>?Classes
32?????????{
33?????????????get?{?return?_classes;?}
34?????????????set?{?_classes?=?value;?}
35?????????}
36?????}
37?}
38?
TClass.cs
?1?using?System;
?2?using?System.Collections.Generic;
?3?using?System.Text;
?4?using?Castle.ActiveRecord;
?5?
?6?namespace?BookStore.Components
?7?{
?8?????[ActiveRecord("book_class")]
?9?????public?class?TClass?:?ActiveRecordBase<TClass>
10?????{
11?????????Guid?_id;
12?????????string?_name;
13?????????int?_birthYear;
14?
15?????????School?_school;
16?
17?????????[PrimaryKey(PrimaryKeyType.Guid)]
18?????????public?Guid?Id
19?????????{
20?????????????get?{?return?_id;?}
21?????????????set?{?_id?=?value;?}
22?????????}
23?
24?????????[Property]
25?????????public?int?BirthYear
26?????????{
27?????????????get?{?return?_birthYear;?}
28?????????????set?{?_birthYear?=?value;?}
29?????????}
30?
31?????????[Property]
32?????????public?string?Name
33?????????{
34?????????????get?{?return?_name;?}
35?????????????set?{?_name?=?value;?}
36?????????}
37?
38?????????[BelongsTo("schoolId")]
39?????????public?School?School
40?????????{
41?????????????get?{?return?_school;?}
42?????????????set?{?_school?=?value;?}
43?????????}
44?????}
45?}
46?
由于個人更喜歡Guid類型的主鍵,所以沒有完全照搬教程的代碼,而是做了一些修改.
編譯,通過.好了,下一步寫點測試代碼吧.
Getting Started里用的是Winform,我順便改成了使用NUnit的測試.
SchoolTest.cs
?1?using?System;
?2?using?System.Collections.Generic;
?3?using?System.Text;
?4?using?NUnit.Framework;
?5?using?Castle.ActiveRecord;
?6?using?Castle.ActiveRecord.Framework.Config;
?7?using?BookStore.Components;
?8?
?9?namespace?BookStore.Tests
10?{
11?????[TestFixture]
12?????public?class?SchoolClass
13?????{
14?????????[TestFixtureSetUp]
15?????????public?void?SetUpAll()
16?????????{
17?????????????XmlConfigurationSource?source?=?new?XmlConfigurationSource("appconfig.xml");
18?
19?????????????ActiveRecordStarter.Initialize(source,?typeof(School),?typeof(TClass));
20?
21?????????????ActiveRecordStarter.CreateSchema();
22?????????????school?=?new?School();
23?????????????school.Name?=?schoolName;
24?????????????school.Create();
25?????????}
26?
27?????????School?school;
28?????????string?schoolName?=?"中國礦業大學(北京)";
29?
30?????????[Test]
31?????????public?void?Schools()
32?????????{
33?????????????Assert.AreEqual(1,?School.FindAll().Length);
34?????????????School?newSchool?=?School.Find(school.Id);
35?????????????Assert.AreEqual(school.Id,?newSchool.Id);
36?????????????Assert.AreEqual(schoolName,?newSchool.Name);
37?????????}
38?
39?????????[Test]
40?????????public?void?Classses()
41?????????{
42?????????????string?className="市場管理001班";
43?????????????TClass?theClass?=?new?TClass();
44?????????????theClass.Name?=?className;
45?????????????theClass.School?=?school;
46?????????????theClass.BirthYear?=?2000;
47?????????????theClass.Create();
48?
49?????????????Assert.AreEqual(1,?TClass.FindAll().Length);
50?????????????TClass?newClass?=?TClass.Find(theClass.Id);
51?????????????Assert.AreEqual(theClass.Id,?newClass.Id);
52?????????????Assert.AreEqual(className,?newClass.Name);
53?????????????Assert.AreEqual(schoolName,?newClass.School.Name);
54?????????????Assert.AreEqual(2000,?newClass.BirthYear);
55?????????}
56?
57?????????[TestFixtureTearDown]
58?????????public?void?TearDown()
59?????????{
60?????????????ActiveRecordStarter.DropSchema();
61?????????}
62?????}
63?}
64?
測試,OK!
需要注意的幾點:
1,ActiveRecord里主鍵默認是int類型,改成Guid之后,PrimaryKey屬性必須聲明為[PrimaryKey(PrimaryKeyType.Guid)],否則進行數據庫操作時會出錯.
2,ActiveRecord里主鍵不應該被賦值,即使賦值了添加到數據庫時也會因為重新生成主鍵而丟失.
3,這個版本的ActiveRecordStarter.CreateSchemaFromFile好像有點問題,執行后沒有任何效果,而且不報任何錯誤.
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的Castle学习之一:安装与环境设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这该死的高度,height,client
- 下一篇: python的重点_python知识点