一、创建领域模型(一些具有[ActiveRecord]属性的类)
此部分内容可以参考TerryLee的《Castle ActiveRecord学习实践》系列,这里不再一一说明。
你可以选择把ObjectQuery.dll添加到你项目的引用中,然后以ObjectQuery.EntityBase<T>作为实体类的基类,例如你原来有个实体类:
public class Blog : ActiveRecordBase
{
}
{
}
你可以定义成:
public class Blog : ObjectQuery.EntityBase<Blog>
{
}
{
}
这样实体类就有更多的功能。
二、生成辅助类
将你上一步创建的项目为CSharp项目,其路径为c:\project\Test\Test.csproj,编译生成程序集c:\project\Test\bin\debug\Test.exe(注意:生成Test.dll也行),然后通过命令行运行ObjectQuery.Generator.exe:
ObjectQuery.Generator.exe cs c:\project\Test\bin\debug\Test.exe c:\project\Test
其中第一个参数为cs或者vb,表示生成代码的语言;第二个参数为你生成的领域模型程序集的路径;第三个参数为生成代码存放的目录。
这样,将会在c:\project\Test目录下面生成的文件ObjectQuery.gen.cs,将它 加入你的项目,这样就可以使用ObjectQuery的强大功能了。
生成的文件中包含两个类的定义:
public class DB
{
}
public class Criteria
{
}
{
}
public class Criteria
{
}
它们所在namespace和代码生成器最先找到的实体类的namespace相同,如果你的实体类定义在不同的namespace中,那么具体选择哪一个作为生成类的namespace是不可控制的。
Criteria类中具有和你的实体类一一对应的Criteria类:
public class Criteria
{
public class BlogCriteria : AbstractCriteria<Test.Blog>
{
}
}
{
public class BlogCriteria : AbstractCriteria<Test.Blog>
{
}
}
这些Criteria类中定义了和你的实体类中属性(和关系表列对应的属性)一一对应的属性。
而DB类则定义了这些Criteria类的一些实例,以方便使用,当然你在需要这些类的实例时也可以自己定义。
public class DB
{
public static Criteria.BlogCriteria Blog = new Criteria.BlogCriteria();
}
{
public static Criteria.BlogCriteria Blog = new Criteria.BlogCriteria();
}
三、使用ObjectQuery类进行查询
Blog blog = Query.From(DB.Blog).Where(DB.Blog.Name == "my blog").FindFirst();
或者:
Criteria.BlogCriteria b = new Criteria.BlogCriteria("b");
Blog blog = Query.From(b).Where(b.Name == "my blog").FindFirst();
或者(如果Blog实体类继承自ObjectQuery.EntityBase<T>):
Blog blog = Blog.FindFirst(DB.Blog.Name == "my blog");
或者:
Blog blog = Mediator<Blog>.FindFirst(DB.Blog.Name == "my blog");
以上四种查询方法的效果是一样的。
关于查询的详细说明,将在后续文章中给出。
下载:ObjectQuery.src.rar 44KB
ObjectQuery.bin.rar 611KB