ObjectQuery:ActiveRecord 强类型对象查询工具
2006-10-16 14:49
441 查看
ObjectQuery是一个结合ActiveRecord的强类型对象查询工具,功能类似 Ayende的[u]NHibernate Query Generator [/u],但更强大。
下载:ObjectQuery.src.rar 44KB
ObjectQuery.bin.rar 611KB
使用示例:
Post[] findAll = Query.From(DB.Post).Where(DB.Post.Title.StartsWith("Overloading") || DB.Post.Title == "Operator").FindAll();
object[][] groupby = Query.From(DB.Post).GroupBy(DB.Post.Title).FindAll(DB.Post.Title, Aggregate.Count(DB.Post));
DateTime? aggregate = Query.From(DB.Post).FindOne(Aggregate.Max(DB.Post.Created));
Post findFirst = Query.From(DB.Post).OrderBy(DB.Post.Created.DescOrder()).FindFirst();
Post[] booltest = Query.From(DB.Post).Where(DB.Post.Published).FindAll();
Blog[] listtest = Query.From(DB.Blog).Where(DB.Blog.Posts.Count > 0).FindAll();
Post[] math = Query.From(DB.Post).Where(DB.Post.Id + 1 > 0).FindAll();
使用步骤:
一、通过数据库表定义或者直接写出ActiveRecord的类。
数据库表定义:
CREATE TABLE [dbo].[Blogs] (
[blog_id] [int] IDENTITY (1, 1) NOT NULL ,
[blog_name] [varchar] (50) NULL ,
[blog_author] [varchar] (50) NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[Posts] (
[post_id] [int] IDENTITY (1, 1) NOT NULL ,
[post_title] [varchar] (50) NULL ,
[post_contents] [text] NULL ,
[post_category] [varchar] (50) NULL ,
[post_blogid] [int] NULL ,
[post_created] [datetime] NULL ,
[post_published] [bit] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
ActiveRecord类定义:
namespace ObjectQuery.Test
2
二、将ActiveRecord类加入一个项目(ObjectQuery.Test),编译项目生成dll或者exe文件(ObjectQuery.Test.exe)。
三、通过命令行运行代码生成工具ObjectQuery.Generator.exe,生成ObjectQuery.gen.cs / .vb 文件。
ObjectQuery.Generator.exe cs e:\temp\ObjectQuery.Test.exe e:\temp
//------------------------------------------------------------------------------
2// <auto-generated>
3// 此代码由工具生成。
4// 运行库版本:2.0.50727.42
5//
6// 对此文件的更改可能会导致不正确的行为,并且如果
7// 重新生成代码,这些更改将会丢失。
8// </auto-generated>
9//------------------------------------------------------------------------------
10
11namespace ObjectQuery.Test
12
四、将代码生成器生成的文件加入到项目中,就可以使用ObjectQuery的强大功能了。
Post.DeleteAll();
2 Blog.DeleteAll();
3
4 Blog blog = new Blog();
5 blog.Name = "tinifish @ blog";
6 blog.Author = "tinifish";
7 blog.Save();
8
9 Blog blog1 = new Blog();
10 blog1.Name = "tinifish @ blog";
11 blog1.Author = "tinifish";
12 blog1.Save();
13
14 Post post = new Post();
15 post.Blog = blog;
16 post.Title = "I love Active Record";
17 post.Contents = "Indeed I do!";
18 post.Category = "dotnet";
19 post.Created = DateTime.Now;
20 post.Published = false;
21 post.Save();
22
23 Post post1 = new Post();
24 //post1.Blog = blog;
25 post1.Title = "Overloading post";
26 post1.Contents = "Indeed I do!";
27 post1.Category = "DOTNET";
28 post1.Created = DateTime.Now;
29 post1.Published = true;
30 post1.Save();
31
32 using (new SessionScope())
33 {
34 Post[] findAll = Query.From(DB.Post).Where(DB.Post.Title.StartsWith("Overloading") || DB.Post.Title == "Operator").FindAll();
35 Assert.IsTrue(findAll.Length == 1 && findAll[0].Id == post1.Id);
36
37 Post[] findAll1 = Query.From(DB.Post).Where(DB.Post.Blog == blog
38 && DB.Post.Title.StartsWith("Overloading") || DB.Post.Title == "Operator").FindAll();
39 Assert.IsTrue(findAll1.Length == 0);
40
41 object[][] groupby = Query.From(DB.Post).GroupBy(DB.Post.Title).FindAll(DB.Post.Title, Aggregate.Count(DB.Post));
42 Assert.IsTrue(groupby.Length == 2);
43
44 DateTime? aggregate = Query.From(DB.Post).FindOne(Aggregate.Max(DB.Post.Created));
45 Post findFirst = Query.From(DB.Post).OrderBy(DB.Post.Created.DescOrder()).FindFirst();
46 Assert.AreEqual(aggregate, findFirst.Created);
47
48 Post[] booltest = Query.From(DB.Post).Where(DB.Post.Published).FindAll();
49 Assert.IsTrue(booltest.Length == 1 && booltest[0].Id == post1.Id);
50
51 Blog[] listtest = Query.From(DB.Blog).Where(DB.Blog.Posts.Count > 0).FindAll();
52 Assert.IsTrue(listtest.Length == 1 && listtest[0].Id == blog.Id);
53
54 Post[] math = Query.From(DB.Post).Where(DB.Post.Id + 1 > 0).FindAll();
55
项目所使用的NHibernate和Castle.ActiveRecord的版本为svn服务器上的最新版本。
这是我在博客园发的第一篇随笔,请大家多多支持。欢迎功能建议和意见反馈。
下载:ObjectQuery.src.rar 44KB
ObjectQuery.bin.rar 611KB
使用示例:
Post[] findAll = Query.From(DB.Post).Where(DB.Post.Title.StartsWith("Overloading") || DB.Post.Title == "Operator").FindAll();
object[][] groupby = Query.From(DB.Post).GroupBy(DB.Post.Title).FindAll(DB.Post.Title, Aggregate.Count(DB.Post));
DateTime? aggregate = Query.From(DB.Post).FindOne(Aggregate.Max(DB.Post.Created));
Post findFirst = Query.From(DB.Post).OrderBy(DB.Post.Created.DescOrder()).FindFirst();
Post[] booltest = Query.From(DB.Post).Where(DB.Post.Published).FindAll();
Blog[] listtest = Query.From(DB.Blog).Where(DB.Blog.Posts.Count > 0).FindAll();
Post[] math = Query.From(DB.Post).Where(DB.Post.Id + 1 > 0).FindAll();
使用步骤:
一、通过数据库表定义或者直接写出ActiveRecord的类。
数据库表定义:
CREATE TABLE [dbo].[Blogs] (
[blog_id] [int] IDENTITY (1, 1) NOT NULL ,
[blog_name] [varchar] (50) NULL ,
[blog_author] [varchar] (50) NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[Posts] (
[post_id] [int] IDENTITY (1, 1) NOT NULL ,
[post_title] [varchar] (50) NULL ,
[post_contents] [text] NULL ,
[post_category] [varchar] (50) NULL ,
[post_blogid] [int] NULL ,
[post_created] [datetime] NULL ,
[post_published] [bit] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
ActiveRecord类定义:
namespace ObjectQuery.Test
2
二、将ActiveRecord类加入一个项目(ObjectQuery.Test),编译项目生成dll或者exe文件(ObjectQuery.Test.exe)。
三、通过命令行运行代码生成工具ObjectQuery.Generator.exe,生成ObjectQuery.gen.cs / .vb 文件。
ObjectQuery.Generator.exe cs e:\temp\ObjectQuery.Test.exe e:\temp
//------------------------------------------------------------------------------
2// <auto-generated>
3// 此代码由工具生成。
4// 运行库版本:2.0.50727.42
5//
6// 对此文件的更改可能会导致不正确的行为,并且如果
7// 重新生成代码,这些更改将会丢失。
8// </auto-generated>
9//------------------------------------------------------------------------------
10
11namespace ObjectQuery.Test
12
四、将代码生成器生成的文件加入到项目中,就可以使用ObjectQuery的强大功能了。
Post.DeleteAll();
2 Blog.DeleteAll();
3
4 Blog blog = new Blog();
5 blog.Name = "tinifish @ blog";
6 blog.Author = "tinifish";
7 blog.Save();
8
9 Blog blog1 = new Blog();
10 blog1.Name = "tinifish @ blog";
11 blog1.Author = "tinifish";
12 blog1.Save();
13
14 Post post = new Post();
15 post.Blog = blog;
16 post.Title = "I love Active Record";
17 post.Contents = "Indeed I do!";
18 post.Category = "dotnet";
19 post.Created = DateTime.Now;
20 post.Published = false;
21 post.Save();
22
23 Post post1 = new Post();
24 //post1.Blog = blog;
25 post1.Title = "Overloading post";
26 post1.Contents = "Indeed I do!";
27 post1.Category = "DOTNET";
28 post1.Created = DateTime.Now;
29 post1.Published = true;
30 post1.Save();
31
32 using (new SessionScope())
33 {
34 Post[] findAll = Query.From(DB.Post).Where(DB.Post.Title.StartsWith("Overloading") || DB.Post.Title == "Operator").FindAll();
35 Assert.IsTrue(findAll.Length == 1 && findAll[0].Id == post1.Id);
36
37 Post[] findAll1 = Query.From(DB.Post).Where(DB.Post.Blog == blog
38 && DB.Post.Title.StartsWith("Overloading") || DB.Post.Title == "Operator").FindAll();
39 Assert.IsTrue(findAll1.Length == 0);
40
41 object[][] groupby = Query.From(DB.Post).GroupBy(DB.Post.Title).FindAll(DB.Post.Title, Aggregate.Count(DB.Post));
42 Assert.IsTrue(groupby.Length == 2);
43
44 DateTime? aggregate = Query.From(DB.Post).FindOne(Aggregate.Max(DB.Post.Created));
45 Post findFirst = Query.From(DB.Post).OrderBy(DB.Post.Created.DescOrder()).FindFirst();
46 Assert.AreEqual(aggregate, findFirst.Created);
47
48 Post[] booltest = Query.From(DB.Post).Where(DB.Post.Published).FindAll();
49 Assert.IsTrue(booltest.Length == 1 && booltest[0].Id == post1.Id);
50
51 Blog[] listtest = Query.From(DB.Blog).Where(DB.Blog.Posts.Count > 0).FindAll();
52 Assert.IsTrue(listtest.Length == 1 && listtest[0].Id == blog.Id);
53
54 Post[] math = Query.From(DB.Post).Where(DB.Post.Id + 1 > 0).FindAll();
55
项目所使用的NHibernate和Castle.ActiveRecord的版本为svn服务器上的最新版本。
这是我在博客园发的第一篇随笔,请大家多多支持。欢迎功能建议和意见反馈。
相关文章推荐
- ObjectQuery for Castle.ActiveRecord 使用指南(1):From语句
- ObjectQuery for Castle.ActiveRecord 使用指南(1):入门
- ObjectQuery for Castle.ActiveRecord 使用指南(1):Joins
- Castle ActiveRecord 应用 Expression.Example 模板对象匹配查询
- 浅谈Vue2.2.0源码(一)-- 查询一个object类型对象在一个object数组中的索引
- 关于GetActiveObject,如何判断所取得对象的类型、、、可以用来检测某个程序是否运行
- Query Object--查询对象模式(下)
- pt-query-digest慢查询分析工具
- Castle.ActiveRecord 子表查询、排序
- 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.VisualStudio.Tools.Applications.Runtime.IHostServiceProvider”
- pt-query-digest查询日志分析工具
- 使用原生sql查询数据返回object类型list时,转换数据列出现转换类型错误(但写法正确)
- js中判断Object、Array、Function等引用类型对象是否相等的方法
- 终极解决:变量类型必须为对象类型("Object") 推荐
- Hibernate学习日记十(Query、Criteria、SQLQuery对象查询所有记录)
- Active Record simple query
- 声明一个Object对象,然后强制转换成Dog类型并判断是否转换成功。
- Castle ActiveRecord 在查询时会自行更新数据库数据的问题 (ZT)
- jdbcTempLate 重写queryForObject错误,防止查询单个失败异常
- Java虚拟机性能监测工具Visual VM与OQL对象查询语言