Skip to main content
 首页 » 编程设计

c#之Nhibernate 4 API 文档

2024年06月20日10lidabo

我无法找到哪个 namespace 包含方法的内容。

  • 例如NHibernate.IQueryOver 不包含“添加”的定义 并且没有扩展方法“添加”接受类型的第一个参数。

由于扩展方法,Visual Studio 无法帮助获得适当的使用方法。

我怎么知道应该包括哪些方法、命名空间?

请您参考如下方法:

如果我们想将 QueryOver 传递给另一个方法,并对它执行一些过滤,我们必须知道传递的类型。

下面的片段显示,我们有一些已知的接口(interface) IBusinessObject,它有 ID 和名称。这有助于为我们的通用参数 T 和 U 创建 where 条件 - 并应用与该接口(interface)相关的一些东西:

using NHibernate.Criterion; 
 
namespace MyNamespace 
{ 
    public interface IBusinessObject 
    { 
        int ID { get; } 
        string Name { get; } 
    } 
 
        public static QueryOver<T, U> AddSomeFilter<T, U>(QueryOver<T, U> queryOver) 
            where T: IBusinessObject 
            where U: IBusinessObject 
        { 
            // here we can play with ID, and Name 
            // because we know that U is of a type IBusinessObject 
            queryOver 
                .Where(x => x.ID > 1) 
                .Where(x => x.Name == "Abc"); 
 
            return queryOver; 
        } 
    } 
} 

这可能没问题,但可能会导致一些依赖性。这就是为什么我真的喜欢使用 Criteria API。我们可以传递一些元数据,并创建更多动态处理器:

public static class MyExtension 
{ 
    public static ICriteria AddLike(ICriteria criteria, string property, string likeValue) 
    { 
        if (property.IsNotEmpty()) 
        { 
            criteria.Add(Restrictions.Like(property, likeValue)); 
        } 
        return criteria; 
    } 

要处理注释中的方法,我们可以这样做:

public class SearchCriteria 
{ 
    public string PropertyName { get; set; } 
    public string LikeValue { get; set; } 
} 
 
public static class MyExtension 
{ 
   public static IQueryOver<Employee, Employee> ConstructQueryConditions( 
        this IQueryOver<Employee, Employee> query 
        , SearchCriteria criteria) 
    { 
        if (criteria.PropertyName.IsNotEmpty()) 
        { 
            query.Where(Restrictions.Like(criteria.PropertyName, criteria.LikeValue)); 
        } 
        return query; 
    }