随笔 - 292  文章 - 38  评论 - 3616  阅读 - 190万

Castle.ActiveRecord的ProxyFactory配置

  前后差不多两年没使用过Castle.ActiveRecord做ORM了,也近两年没有关注Castle的版本变化了,最近关注了发现很多地方都改变了。今天在一个现有的小项目中尝试添加Castle.ActiveRecord来做数据持久化操作,以前不需要做ProxyFactory配置,现在必须要ProxyFactory配置。使用到了NHibernate.ByteCode.Castle.dll组件。

 

  ActoiveRecord的配置文件有了明显的变化,需要配置ProxyFactory才能完成持久化操纵,详细配置如下:

复制代码
  <activerecord>
    
<config>
      
<add key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>
      
<add key="dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
      
<add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
      
<add key="connection.connection_string" value="Data Source=SQL05;Initial Catalog=testdb;uid=sa;pwd=12345;" />
      
<add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"/>
    </config>
  
</activerecord>
复制代码

 

  其他的使用基本上没有变化,下面是一个ORM的对象配置。

复制代码
[ActiveRecord("UserInfo")]
public class UserInfo : ActiveRecordBase<UserInfo>
{
    [PrimaryKey(PrimaryKeyType.Identity, 
"ID")]
    
public int ID { getset; }

    [Property(
"Sex", Length = 50)]
    
public string Sex { getset; }

    [Property(
"Name", NotNull = true)]
    
public string Name { getset; }
}
复制代码

 

 

  初始化配置也还是和以前的版本使用方式一样的,支持单个对象、多个对象、单个程序集、多个程序集等等不同方式的关系映射对象进行初始化。

protected void Application_Start(object sender, EventArgs e)
{
    IConfigurationSource source 
= ConfigurationManager.GetSection("activerecord"as IConfigurationSource;
    
//ActiveRecordStarter.Initialize(source, typeof(Entity.UserInfo));
    ActiveRecordStarter.Initialize(Assembly.Load("Entity"), source);
}

  

  由于关系映射对象继承于ActiveRecordBase<T>泛型版本,因此可以直接基于关系映射对象使用数据持久化操纵行为,和老版本的使用方式是一样的。

复制代码
protected void Page_Load(object sender, EventArgs e)
{
    
if (!IsPostBack)
    {
        UserInfo info 
= new UserInfo();
        info.Name 
= "zhangsan";
        info.Sex 
= "";
        
//插入info数据到数据库中所映射的关系表
        info.Create();
    }
}
复制代码

 

   至于ProxyFactory的具体作用暂时没有深入研究,也不知道AR为什么会在新版本中添加这个功能,我想应该是想通过NHibernate对Castle的AR进行某些控制,暂时没有时间研究,期待有研究过的朋友分享,谢谢。

posted on   Bēniaǒ  阅读(1705)  评论(5编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2009-11-24 【Silverlight】Bing Maps学习系列(二):通过Bing Maps Silverlight Control如何显示地图

点击右上角即可分享
微信分享提示