Ravendb 在字典上转换失败的结果

Ravendb 在字典上转换失败的结果,ravendb,Ravendb,这是以下问题的后续问题: 鉴于以下类别: public class Product { public string Id { get; set; } public string Name { get; set; } public SpecialType DefaultOffer { get; set; } public Dictionary<SpecialType, string> Specials {

这是以下问题的后续问题:

鉴于以下类别:

    public class Product
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public SpecialType DefaultOffer { get; set; }
        public Dictionary<SpecialType, string> Specials { get; set; }
    }

    public enum SpecialType
    {
        None = 0,
        Something1,
        Something2
    }
公共类产品
{
公共字符串Id{get;set;}
公共字符串名称{get;set;}
public SpecialType DefaultOffer{get;set;}
公共字典专用项{get;set;}
}
公共枚举特殊类型
{
无=0,
有些事情1,
什么
}
我创建了一个索引,如下所示:

    public class ProductSummariesViaTransform : AbstractIndexCreationTask<Product>
    {
        public ProductSummariesViaTransform()
        {
            Map = products => from p in products
                              select new { p.Name };

            TransformResults = (db, products) =>
                                from product in products
                                select new
                                {
                                    Id = product.Id,
                                    Name = product.Name,
                                    SpecialOffer = product.Specials[product.DefaultOffer]
                                };
        }
    }
公共类ProductSummaresViaTransform:AbstractIndexCreationTask
{
公共产品摘要ViaTransform()
{
Map=products=>来自products中的p
选择新的{p.Name};
TransformResults=(数据库、产品)=>
从产品到产品
选择新的
{
Id=product.Id,
Name=product.Name,
SpecialOffer=product.Specials[product.DefaultOffer]
};
}
}
如果我使用
.AsProjection()
使用此索引进行查询,则SpecialOffer始终为空,尽管Id和名称已正确填充

但是,如果我将转换更改为显式加载文档(如下所示),则SpecialOffer将按预期填充

            TransformResults = (db, products) =>
                                from product in products
                                let p = db.Load<Product>(product.Id) // explicit load
                                select new
                                {
                                    Id = product.Id,
                                    Name = product.Name,
                                    SpecialOffer = p.Specials[p.DefaultOffer] // use explicit doc
                                };
TransformResults=(数据库、产品)=>
从产品到产品
设p=db.Load(product.Id)//显式加载
选择新的
{
Id=product.Id,
Name=product.Name,
SpecialOffer=p.Specials[p.DefaultOffer]//使用显式文档
};
抛开TransformResults是否是实现这一点的最佳方式的问题不谈,似乎不必在转换中再次加载产品文档,以便能够访问
Specials
字典

我的理解是,转换始终可以使用底层文档。我是遗漏了什么还是这是一个错误


完整的(通过的)单元测试可在。

AsProjection
更改传递给TransformResults的数据。
您需要将
作为
或类型的
发送给我们。

谢谢Ayende。这就解决了问题。关于何时使用As()和AsProjection()有什么指导吗?废话。刚刚发现了这一差异的原因。