2013-09-30 43 views
1

我正在索引2個不同的文檔,如下所示。將不同的文檔索引到RavenDb中的同一對象

public class User 
{ 
    public UserId UserId { get; set; } 
    public string DisplayName { get; set; } 
} 

public class UserGroup 
{ 
    public UserGroupId UserGroupId { get; set; } 

    public string Name { get; set; } 
} 

//this is for indexing result 
public class SecurityObject 
{ 
    public virtual Guid Id { get; set; } 

    public virtual string DisplayName { get; set; } 

    public virtual SecurityObjectType ObjectType { get; set; } 
} 

我的查詢如下。正如您在Index配置中看到的那樣,我將Name屬性映射到DisplayName,但DisplayName屬性爲null,當返回文檔是UserGroup時。當我檢查提取的文件Name屬性未映射到DisplayName屬性和實際值仍然停留在Name屬性。如何正確地將Name財產轉換爲財產UserGroup

_session.Query<SecurityObject, SecurityObjectIndex>() 
    .Where(s => s.DisplayName.StartsWith(searchTerm)) 
    .ProjectFromIndexFieldsInto<SecurityObject>(); 

這裏是我的索引配置:

public class SecurityObjectIndex 
    : AbstractMultiMapIndexCreationTask<SecurityObject> 
{ 
    public override string IndexName 
    { 
     get 
     { 
      return "UserAndUserGroup/SecurityObjectIndex"; 
     } 
    } 

    public SecurityObjectIndex() 
    { 
     AddMap<User>(users => from u in users 
           select new 
           { 
            DisplayName = u.DisplayName, 
            ObjectType = SecurityObjectType.Users 
           }); 

     AddMap<UserGroup>(userGroups => from u in userGroups 
             select new 
             { 
              DisplayName = u.Name, 
              ObjectType = SecurityObjectType.Groups 
             }); 
    } 
} 

回答

0

爲了從索引字段來推算,這些領域必須存儲與索引。以下內容添加到您的索引定義:

Store(x=> x.DisplayName, FieldStorage.Yes); 
Store(x=> x.ObjectType, FieldStorage.Yes); 

或者,你可以使用這個快捷方法:

StoreAllFields(FieldStorage.Yes); 

但我個人更喜歡單獨標記每個之一。

相關問題