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,录入代码:

ContractedBlock.gifExpandedBlockStart.gifSchool.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 

ContractedBlock.gifExpandedBlockStart.gifTClass.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的测试.

ContractedBlock.gifExpandedBlockStart.gifSchoolTest.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好像有点问题,执行后没有任何效果,而且不报任何错误.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

next按钮源码android,Android Edittext 软键盘输入法回车键改成下一步Next

软件盘中回车键默认功能是换行&#xff0c;但是有时候我们在Edittext中输完内容后点回车想要把焦点切到下一个Edittext继续输入&#xff0c;比如常见的登录页面&#xff0c;在输完用户名后&#xff0c;点回车调到输入密码输入框继续输入。示例代码代码很简单&#xff0c;如下所…

SQL SERVER 2005 T_SQL新的特性以及解决并发

一.修改语句的增强UPDATE test SET tname.WRITE(one hundred and two, 9, 3) WHERE tid 102在2005中增强了update方法&#xff0c;这是修改test表的列tname WRITE方法是把tname这个列中从字符串9开始 把3个长的字符串改为one hundred and two二、异常的捕获可以捕获过去会导致…

android跑分和ios,手机:苹果VS安卓 跑分不代表手机流畅度

原标题&#xff1a;手机&#xff1a;苹果VS安卓 跑分不代表手机流畅度在当前的国内手机市场中&#xff0c;有两个阵营&#xff1a;安卓和苹果。 安卓系统仍然是使用最多的系统。从最初的128M内存到当前的十多GB内存&#xff0c;安卓手机已得到迅速发展和更新。但总体而言&#…

余宏德:Sun所有的核心技术都是开放的

3月30日上午&#xff0c;“Sun 2007年媒体论坛”在香港举办。时值Sun公司成立25周年&#xff0c;因此本次活动备受大家关注。Sun公司大中华区管理层和技术专家与40家左右的媒体记者进行了面对面的讨论。本次活动的主题是“创新共享成长&#xff0d;为社会进步而创新”&#xff…

图示/白话 execve执行流程

转载于:https://www.cnblogs.com/image-eye/archive/2011/07/13/2105411.html

易企秀手机html5场景源码,【VIP源码】六月1日最新完美版易企秀微信场景源码

[v_notice]下面演示图为哥亲测截图&#xff0c;仅供参考&#xff0c;在这里下载的源码100%和演示截图一致[/v_notice]修补的首页&#xff1a;前台用户后台界面&#xff1a;场景制作界面&#xff1a;转场特效页面&#xff1a;特效增加&#xff1a;设计模板&#xff1a;制作预览页…

Effective C# 原则48:了解更多的工具和资源(译)

Effective C# 原则48&#xff1a;了解更多的工具和资源 Item 48: Learn About Tools and Resources 对于C#以及.Net来说这是激动人心的时候。这些工具目前还是比较新的&#xff0c;整个社区都在学习如何使用这些工具。一些资源可以帮助你提高你的知识&#xff0c;以及为.Net和…

计算机2013知识,【2013年计算机基础知识习题与答案(三)】- 环球网校

46.与十进制数128等值的二进制数是10000000.47.与十进制数217等值的二进制数是11011001.48.八进制数的基数为8&#xff0c;能用到的数字符号个数为8.49.十进制数38转换成八进制数是46.50.十进制数72转换成八进制数是110.51.与十进制数283等值的十六进制数是11B.52.与二进制数11…

上周回顾:艾妮闹春 Sun/HP高层人士震荡

进入4月&#xff0c;春暖花开。然而随着Vista首个漏洞“ANI”的到来&#xff0c;上周显然让许多人又紧张了一回。同样紧张的还有IT媒体的记者&#xff1a;周一一上班就传出Sun公司大中华区总裁余宏德和其他高管离职的消息&#xff0c;周五临下班HP中国总裁孙振耀又宣布“退休”…

计算机自带游戏如何删除,详细教你系统怎么删除游戏

很多时候&#xff0c;在我们安装系统就会自带一些游戏软件&#xff0c;但是我们不怎么感兴趣&#xff0c;放在那里有占用内存&#xff0c;只有将它们删除了&#xff0c;如何彻底删除windows系统自带的游戏蜘蛛纸牌呢&#xff1f;下面&#xff0c;就有系统之家小编来给大家讲解系…

win10创建新的计算机用户名和密码错误,Win10开机提示用户名或密码不正确现象的解决办法...

有用户遇到Win10开机提示用户名或密码不正确的问题&#xff0c;当你点击“确定(OK)”后欢迎屏幕上会出现两个相同的用户账户让你选择&#xff0c;让你不知道该选择哪一个&#xff0c;这个问题是什么原因&#xff1f;怎么解决呢。问题原因出现上述问题的原因可能是你在设置了Win…

删除计算机360云盘,win7系统怎么取消电脑右键保存到360云盘选项

在日常使用win7系统的时候&#xff0c;我们经常会用到右键菜单&#xff0c;可是有时候会遇到一些没有用的选项&#xff0c;比如保存到360云盘选项&#xff0c;如果不喜欢的话&#xff0c;要怎么取消电脑右键保存到360云盘选项呢&#xff1f;具体步骤如下。1、首先有这一项的都是…

网吧服务器RAID 0+1硬盘阵列组建图解

网吧服务器RAID 01硬盘阵列组建图解步小羽   2007年04月13日   来源&#xff1a;天下网吧联盟随着网吧规模扩大&#xff0c;网吧电脑数量也会相应增加&#xff0c;上网的顾客也随之增多&#xff0c;服务器硬盘数据存取的速度将会成为新的瓶颈&#xff0c;很多顾客开始投诉服务…

VXLAN实验

拓扑图&#xff1a; SPINE配置&#xff1a; hostname SPINE-1vdc SPINE-1 id 1 limit-resource vlan minimum 16 maximum 4094 limit-resource vrf minimum 2 maximum 4096 limit-resource port-channel minimum 0 maximum 511 limit-resource u4route-mem minimum 248 maximum…

VSTS For Testers读书笔记(5)

四、编辑WebTest3、添加提取规则和自定义提取规则添加提取规则1、当必须从特定页中捕获一部分数据并且供另一个页使用时&#xff0c;就需要用到提取规则。可以使用提取规则从响应中复制字符串&#xff0c;然后将字符串存储到上下文变量中&#xff0c;以供任何后续请求使用。通过…

html里面怎么ul加高度,div里面嵌套了ul,为什么div的高度小于ul高度

div高度见阴影部分ul高度见阴影部分实现的html代码如下&#xff1a;热门推荐css代码如下&#xff1a;.navBar {clear: both;width: 100%;border: solid;/*border-top: solid;*/border-bottom: solid;border-width: 1px;border-color: #dddddd;margin:0px;height: 1.5em;}.navBa…

Asp.net2.0水晶报表的一些示例源码

最近关注了一下Asp.net2.0中水晶报表的资料&#xff0c;发现示例少之又少&#xff08;怀疑是水晶报表免费的比较少的缘故&#xff09;&#xff0c;搜集到了Asp.net官方的许多示例源码&#xff0c;试了几个还不错&#xff0c;这里发给大家分享一下&#xff08;我仅把Asp.net C#部…

计算机网络作业6,计算机网络作业 6

请回答下列问题&#xff1a;(1)主机在配置IP地址时&#xff0c;其正确的子网掩码和默认网关分别是多少&#xff1f;(2)若路由器R在向互联网转发一个由主机192.168.1.5发送、ID12345、length500B、DF1的IP分组时&#xff0c;则该IP分组首部的哪些字段会被修改&#xff1f;如何修…

QQ2007 Beta2 下载地址泄露

QQ2007 Beta2地址的地址已经泄露,来自腾讯官方论坛的一位能体验的朋友.安装完要求重启电脑,不过貌似目前非相关测试人员无法登录这个版本,当然聪明的网友们还是会自己想办法搞定 :)尊敬的QQ用户,您幸运地被腾讯公司选中参与QQ2007Beta2试用,我们很高兴有这个机会可以让小部分用…

画江恩线

有同学问江恩线的画法。俺这次讲仔细了。希望喜欢江恩理论的同学们都可以学会了。因为讲一次很麻烦的。上图是大盘周线图的江恩线。 江恩理论的核心是用历史来发现未来。所以想学习江恩理论的同学必须明白这其中的关键。凡是没有这历史未来观的江恩理论学习都是瞎扯淡。就像缠…