NHibernate.Search映射未知类

时间:2011-09-14 21:34:01

标签: nhibernate.search

程序集包含类似

的类
public class CustomPage : Page, ISearchable
{
    [Searchable]
    public virtual string CustomText { get; set; }
    public virtual string SearchableText { get; set; }
}

我想映射到Lucene.net。我不能为这些类添加属性,也不能使用 ISearchMapping ,因为类型是未知的(没有对该程序集的引用)。

我该如何进行映射?所有可用信息都是所有类型都继承 Page 并实现 ISearchable 。要映射的唯一属性是 SearchableText (在使用 [Searchable] 保存所有属性之前连接到该属性)。

1 个答案:

答案 0 :(得分:1)

您可以使用此设计Generic DAO Object。我使用此实现构建了整个基础架构。您可以创建一个通用DAO,并将其与任何类型的映射对象一起使用。

public GenericDAO<T>
{
     public List<T> Search(Criteria[] criterias)
     {}

     public T Save(T entity)
     {
     }

     public T Update(T entity)
     {
     }

     Public void Delete(T entity)
     {
     }

}

// any mapped object.
public MyMappedObject
{
   public virtual string ID {get; set;}
   public virtual string Name {get; set;}

   public MyMappedObject()
   {
       ID = Guid.NewGuid().ToString();
   }
}

// usage in code.
MyMappedObejct myMappedObjectInstance = new MyMappedObejct();
myMappedObjectInstance.Name = "new name";

GenericDAO<MyMappedObejct> myMappedObejctDao = new GenericDAO<MyMappedObject>();

// Insert
myMappedObjectInstance = myMappedObejctDao.Save(myMappedObjectInstance);

// Select
MyMappedObejct myMappedObjectInstance = myMappedObejctDao.Search().First();

// Update
myMappedObjectInstance.Name = "another name";
myMappedObjectInstance = myMappedObejctDao.Update(myMappedObjectInstance);

// Delete
myMappedObejctDao.Delete(myMappedObjectInstance);

这是一个非常简单的例子,我在一百多个课程中制作了一个更复杂的版本,而且效果很好。