欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

城堡主动记录通用应用

墨初 知识笔记 55阅读

castle活动记录支持的泛型。Net2.0 .这对我们创建强类型集合和对对象的强类型操作非常方便。本文引用了Castle网站上的一个泛型实例来详细介绍如何应用泛型。另外,你需要找到NHibernate。这里的泛型支持AR对泛型的扩展。这个例子描述了Blog和Post之间最简单的一对多关系。为了让例子更清晰,做了一点修改。伊比利亚人.Generics包含了几个泛型集合供我们参考,比如实体集、实体列表、实体字典等等。以及EntityRef的结构。匹配这些集合的数据库以创建一个表[DBO]。[blog](]([blog _ ID][int]identity(11,1 1) not。n style='color: rgba(0,0,0,1)'NULL,[blog_name][varchar](50)NULL,)ON[PRIMARY]CREATETABLE[dbo]。[帖子]([帖子id][int]

n style="color: rgba(0, 0, 0, 1)"> IDENTITY (11NOT NULL ,
    
[post_title] [varchar] (50NULL ,
    
[post_contents] [text] NULL ,    
    
[post_blogid] [int] NULL ,    
ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Bolg Class

    在BlogClass中看到了这样的定义EntitySet<Post> _posts.

    首先看看构造函数中对它的初始化2个匿名delegate的作用是当向Bolg.Posts集合中添加或移除一个Post时,自动添加或移除Post.Bolg属性设置.省却了每次都需要做双向设置.

    再来看一下Bolg.Posts的公开属性返回一个ICollection的接口是很重要的而不是具体类型,这样屏蔽了直接使用NHibernate.Generics中的集合所带来的依赖.

    最后看看顶上的attribute,对应关系不多讲,CustomAccess = Generics.Access是一定要标明的描述了泛型访问方式.RelationType = RelationType.Set同样要标识明确RelationType.Set对应EntitySet, RelationType.Bag则对应EntityList.Inverse属性有可无了,它指明了即使Bolg.Posts中的Post没有被存入数据库Bolg一样可以被先保存,通常我认为使用Cascade = ManyRelationCascadeEnum.All会更好.

    还有一点需要注意的是应用了泛型的私有变量命名如 _posts,按照AR目前最新的DailyBulid你必须按照下划线这样的格式命名,Access属性的设置似乎是无效的.如果使用其他方式会出错.

    泛型集合之后来关注下其他问题.

    你看到了Id的attribute,由于id是自动生成的所以无需设置set访问器,Access = PropertyAccess.NoSetterCamelCaseUnderscore会帮你赋值NoSetterCamelCaseUnderscore指出Id属性的私有变量命名方式是无set访问器的以下划线开头的Camel命名方式.

    对对象的数据库操作同样可以使用泛型,可以看到FindByName中省去了麻烦的转型.

Post Class

    在PostClass中EntityRef是一个对对象的包装,使得它能够添加delegate与Entityxx集合对应来处理添加或移除的同步操作.在Post.Blog属性中可以通过_blog.Value来访问与设置EntityRef包装的值.attribute并没有特别支处,只是CustomAccess = Generics.Access也是不可缺少的属性.

    现在你可以使用ActiveRecord轻松编程了.

标签:
声明:无特别说明,转载请标明本文来源!