2009-12-18 34 views
0

我试图找出如何以编程方式(即不使用FieldAttribute)为NHibernate Search(Lucene.net)添加索引列, 。如何以编程方式为NHibernate搜索(Lucene.net)添加索引列而不使用FieldAttribute

我有继承问题,因为FieldAttribute没有自动继承。

以下代码说明了我想要做的事情。

class A 
{ 
    [Field(Index.Tokenized)] 
    public virtual string P1 
    { 
     get 
     { 
      return "P1"; 
     } 
    } 
} 

class B : A 
{ 
    public override string P1 
    { 
     get 
     { 
      return "P1+"; 
     } 
    } 
} 

我预计P1的覆盖被索引,但它没有。当我检查FieldAttribute课程时,我发现它没有在AttributeUsage属性中指定的Inherited = true

然后,我将FieldAttribute添加到重写的属性,但导致NHibernate搜索引发异常,指出具有相同键的项目已添加到字典中。我认为这是因为在类型链中有两个同名的属性,它们都是FieldAttribute,它只接受一个属性。

那么,如何通过不使用FieldAttribute以编程方式解决此问题?

回答

1

最近实现了非属性映射,请看this blog post

+0

太好了,我没有看到那个编辑,但我很高兴看到这个补丁进来了! – 2010-02-20 23:43:20

1

我刚刚开始了一个类似于FluentNHibarnate的Fluent NHibernate.Search映射接口,它允许您映射没有属性的实体。

public class BookSearchMap : DocumentMap<Book> 
{ 
    public BookSearchMap() 
    { 
     Id(p => p.BookId).Field("BookId").Bridge().Guid(); 
     Name("Book"); 
     Boost(500); 
     Analyzer<StandardAnalyzer>(); 

     Map(x => x.Title) 
      .Analyzer<StandardAnalyzer>() 
      .Boost(500); 

     Map(x => x.Description) 
      .Boost(500) 
      .Name("Description") 
      .Store().Yes() 
      .Index().Tokenized(); 
    } 
} 

您应该看看codeplex上托管的项目网站。

http://fnhsearch.codeplex.com/