一、创建领域模型(一些具有[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
    
{
        
    }

它们所在namespace和代码生成器最先找到的实体类的namespace相同,如果你的实体类定义在不同的namespace中,那么具体选择哪一个作为生成类的namespace是不可控制的。
Criteria类中具有和你的实体类一一对应的Criteria类:

public class Criteria
{
    
    
public class BlogCriteria : AbstractCriteria<Test.Blog>
    
{
    }

    
}

这些Criteria类中定义了和你的实体类中属性(和关系表列对应的属性)一一对应的属性。
而DB类则定义了这些Criteria类的一些实例,以方便使用,当然你在需要这些类的实例时也可以自己定义。

public class DB
{
    
    
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
posted on 2006-10-17 13:37  benfish  阅读(1646)  评论(4编辑  收藏  举报