NHibernate.Search отображение неизвестных классов - PullRequest
0 голосов
/ 15 сентября 2011

Сборка содержит классы типа

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 Ответ

1 голос
/ 21 ноября 2011

Вы можете использовать этот дизайн Общий объект 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);

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

...