C# 将不同文档索引到RavenDb中的同一对象
我正在为以下两个不同的文档编制索引C# 将不同文档索引到RavenDb中的同一对象,c#,.net,ravendb,C#,.net,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 f
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; }
}
我的问题如下。正如您在索引配置中看到的,我将Name属性映射到DisplayName,但当返回的文档是UserGroup时,DisplayName属性为null。当我查看获取的文档时,Name属性没有映射到DisplayName属性,并且实际值仍然保留在Name属性上。如何正确地将用户名属性转换为用户组上的DisplayName属性
以下是我的索引配置:
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
});
}
}
为了从索引字段进行投影,这些字段必须与索引一起存储。将以下内容添加到索引定义中:
Store(x=> x.DisplayName, FieldStorage.Yes);
Store(x=> x.ObjectType, FieldStorage.Yes);
或者,您可以使用以下快捷方式:
StoreAllFields(FieldStorage.Yes);
但就我个人而言,我更喜欢单独标记每一个
StoreAllFields(FieldStorage.Yes);