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] объединяются с этим свойством).


person Mike Koder    schedule 14.09.2011    source источник


Ответы (1)


Вы можете использовать этот дизайн Универсальный объект DAO. Я построил всю инфраструктуру, используя эту реализацию. Вы создаете общий 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);

Это очень упрощенный пример, я сделал гораздо более сложную версию с более чем сотней классов, и она отлично работает.

person Mr Mush    schedule 21.11.2011