Castle Active Record for .NET2.0快速入门示例

一.创建Web工程

创建一个Web站点或者Web应用程序,添加对Castle.ActiveRecord.dll的引用。

二.创建需要持久化的业务实体

.NET2.0下,由于引入了泛型,创建业务实体比1.1下简单了许多,业务实体只需要继承于泛型的ActiveRecordBase类,其中默认已经实现了一些静态的方法,不需要我们再在业务实体中实现。

[ActiveRecord("Employees")]

public class Employee : ActiveRecordBase<Employee>
{
    
private string employeeID;

    
private string lastName;

    
private string city;

    
private string address;

    
private string homePhone;

    
private string country;
 

    [PrimaryKey(PrimaryKeyType.Assigned)]
    
public string EmployeeID
    
{
        
get return employeeID; }

        
set { employeeID = value; }
    }


    [Property]
    
public string LastName
    
{
        
get return lastName; }

        
set { lastName = value; }
    }


    [Property]
    
public string City
    
{
        
get return city; }

        
set { city = value; }
    }


    [Property]
    
public string Address
    
{
        
get return address; }

        
set { address = value; }
    }


    [Property]
    
public string HomePhone
    
{
        
get return homePhone; }

        
set { homePhone = value; }
    }


    [Property]
    
public string Country
    
{
        
get return country; }

        
set { country = value; }
    }

}

三.设置配置信息

Web.config中设置如下信息,这部分与1.1没有什么区别

<?xml version="1.0"?>

<configuration>

    
<configSections>

        
<section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord"/>

    
</configSections>

    
<connectionStrings>

        
<add name="NorthWind" connectionString="Data Source=RJ-097;Initial Catalog=Northwind;User ID=sa;Password=sa"/>

    
</connectionStrings>

    
<activerecord isWeb="true">

        
<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="ConnectionString = ${NorthWind}"/>

        
</config>

    
</activerecord>

</configuration>

四.初始化ActiveRecord

Global.asaxApplication_Start添加初始化代码

void Application_Start(object sender, EventArgs e) 
{
// Code that runs on application startup

Castle.ActiveRecord.Framework.IConfigurationSource source 
=  System.Configuration.ConfigurationManager.GetSection("activerecord"as Castle.ActiveRecord.Framework.IConfigurationSource;
    Castle.ActiveRecord.ActiveRecordStarter.Initialize(
typeof(Employee).Assembly, source);

}

五.使用业务实体

这部分也是与1.1一样,同样可以使用Create()Save()Update()等方法,不详细说了,这里我们用一个GridView来展示读取国家为UK的员工列表

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<html>

<head runat="server">

    
<title>Castle Active Record for 2.0快速入门示例</title>

</head>

<body>

    
<form id="form1" runat="server">

     
<h1>Castle Active Record for 2.0快速入门示例</h1>

        
<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">

            
<Columns>

                
<asp:BoundField HeaderText="Employee ID" DataField="EmployeeID" />

                
<asp:BoundField HeaderText="LastName" DataField="LastName" />

                
<asp:BoundField HeaderText="City" DataField="City" />

                
<asp:BoundField HeaderText="Address" DataField="Address" />   

                
<asp:BoundField HeaderText="HomePhone" DataField="HomePhone" />

                
<asp:BoundField HeaderText="Country" DataField="Country" />

            
</Columns>

        
</asp:GridView>

    
</form>

</body>

</html>

后台代码:

protected void Page_Load(object sender, EventArgs e)
{
    
this.GridView1.DataSource = Employee.FindAllByProperty("Country""UK");

    
this.GridView1.DataBind();
}
最后,运行的结果如下:

 

内容有些简单,后续有时间会继续介绍Castle Active Record for .NET2.0

完整代码下载:/Files/Terrylee/ARExamWithAspnet.rar

更多Castle的文章你可以访问:http://terrylee.cnblogs.com/archive/2006/04/28/castl_ioc_article.html

(出处:博客园http://terrylee.cnblogs.com

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  回复  引用    
#1楼2006-07-22 04:16 | JM[未注册用户]
Do you use MonoRail?
  回复  引用    
#2楼2006-09-06 15:58 | 阿潘[未注册用户]
错误 16 找不到类型或命名空间名称“ARExamWithAspnet”(是否缺少 using 指令或程序集引用?) C:\Documents and Settings\P\My Documents\Visual Studio 2005\ARExamWithAspnet\Global.asax 2

  回复  引用  查看    
#3楼[楼主]2006-09-06 17:02 | TerryLee      
@阿潘
在Global.asax 中引入命名空间

  回复  引用    
#4楼2006-09-12 16:37 | 阿潘[未注册用户]
以前用nhibernate的时候(vs2003)
可以对nhibernate源码进行修改,使其支持access

现在vs2005了,AR封装了nhibernate,都不知道怎么去修改源码使AR支持access了,

Nhibernate官方的源码,都看不到1.0和2.0的区别

谁能告诉我怎么使AR支持ACCESS吗?在vs2005中,万分感激.
pwy.mail@163.com

  回复  引用    
#5楼2006-09-13 16:03 | 阿潘[未注册用户]
哈哈,今天终于把AR修改,支持Access了,解决事情的办法还是得自己多动手阿。
  回复  引用    
#6楼2006-09-21 10:48 | cnkker[匿名][未注册用户]
Employee.FindAllByProperty("Country", "UK");

找不到FindAllByProperty方法怎么办?

  回复  引用  查看    
#7楼[楼主]2006-09-24 16:25 | TerryLee      
@cnkker[匿名]
下载最新的版本看看

  回复  引用    
#8楼2006-09-26 23:16 | 花生米[匿名][未注册用户]
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
Castle.ActiveRecord.Framework.IConfigurationSource source = System.Configuration.ConfigurationManager.GetSection("activerecord") as Castle.ActiveRecord.Framework.IConfigurationSource;
ActiveRecordStarter.Initialize(typeof(Precinct).Assembly ,source);

}

我在2005中这样初始化,却报了下面的错误
You must specify a discriminator value for the type Precinct

能告诉我这是为什么吗?好像2003中同样使用就不存在这个问题?谢谢!

  回复  引用  查看    
#9楼[楼主]2006-09-27 08:13 | TerryLee      
@花生米[匿名]
把你的实体类Precinct贴出来看一下吧

  回复  引用    
#10楼2006-09-28 15:34 | 花生米[匿名][未注册用户]
这个问题我已经解决了,谢谢!
  回复  引用    
#11楼2006-09-29 17:04 | codelover[未注册用户]
.net开源框架qq群30017484,Castle ActiveRecord、Nhibernate、ibatisnet、IOC容器Spring.Net和Castle、等框架学习,欢迎加入,共同进步
  回复  引用    
#12楼2006-10-11 15:47 | hope[匿名][未注册用户]
欢迎大家加入我的Castle qq群 号码 275885
  回复  引用  查看    
#13楼2006-11-01 22:22 | Tseng      
初始化只能是在Global.asax里面吗?

  回复  引用  查看    
#14楼[楼主]2006-11-01 22:44 | TerryLee      
@Tseng
Web项目一般是放在Global.asax中

  回复  引用  查看    
#15楼2006-11-01 23:45 | Tseng      
@TerryLee
若有很多个类,都全部放到那里吗?不能动态初始化吗?

  回复  引用  查看    
#16楼[楼主]2006-11-02 19:31 | TerryLee      
@Tseng
好像是不能,我只知道Web下有这种初始化方法,别的不太清楚

  回复  引用  查看    
#17楼2006-11-03 09:40 | Tseng      
@TerryLee
刚刚看了这篇文章http://www.ayende.com/Blog/BuildingApplicationsUsingCastleRC2PartI.aspx">http://www.ayende.com/Blog/BuildingApplicationsUsingCastleRC2PartI.aspx,初始化后的实例不知道什么丢失,所以这样比较好点
private static bool isInitialized = false;
if (!isInitialized)
{
//初始化实例...
isInitialized = true;
}
这样就可以放到任何页面了。

  回复  引用    
#18楼2006-11-21 23:51 | liubo[未注册用户]
@TerryLee
关于ActiveRecord,在基于Remoting的应用中,如果客户应用通过一个远程对象获取的一个数据实体对象(ActiveRecordBase),这时客户端直接调用这个对象的Create方法或是Save方法会出现什么情况呢?在Remoteing或是WebServices环境中使用ActiveRecord如何做才比较好呢?

  回复  引用  查看    
#19楼[楼主]2006-11-23 21:10 | TerryLee      
@liubo
在Remoting中没有做过,不好说

  回复  引用    
#20楼2006-12-04 21:04 | bigenius[未注册用户]
请问下Castal里怎么调用存储过程啊 ?
  回复  引用  查看    
#21楼[楼主]2006-12-04 23:38 | TerryLee      
@bigenius
使用ActiveRecordMediator看看,把存储过程的执行,包括要传递的参数拼成一个SQL语句

// 不过我不能保证是否可以:)

  回复  引用    
#22楼2007-02-05 15:38 | andy[未注册用户]
在业务实体Employee中出现错误:类型“NHibernate.ILifecycle”在未被引用的程序集中定义。必须添加对程序集“NHibernate,Version=1.0.2.0,Culture=neutral”的引用,可是我已经引用了NHibernate了啊!请楼主指教!
  回复  引用    
#23楼2007-03-06 11:53 | blindcat[未注册用户]
@andy
没有引用NHibernate

  回复  引用    
#24楼2007-04-16 13:27 | 一凡[未注册用户]
Web.config里没有加密是不是不安全呀
  回复  引用  查看    
#25楼2007-04-23 15:31 | Kevin Wu      
winform下如何初始化?
  回复  引用  查看    
#26楼2007-04-23 15:35 | Kevin Wu      
还有个问题,为什么会提示找不到属性的架构信息?
  回复  引用    
#27楼2007-05-16 10:04 | s[未注册用户]
Error 1 Could not load file or assembly 'NHibernate, Version=1.0.2.0, Culture=neutral, PublicKeyToken=154fdcb44c4484fc' or one of its dependencies. The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))

  回复  引用    
#28楼2007-08-09 10:47 | 555[未注册用户]
大哥,你的例子不是一般的不全。你就不能把解决方案放上啊。



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 433130




相关文章:

相关链接: