RavenDb:RavenJObject.ToObject <t>()丢失了Id

时间:2017-07-14 02:19:14

标签: ravendb

我有一个实体类型:

public class Log
{
    public int Id { get; set; }
    public string Action { get; set; }
    public string Message { get; set; }
}

我的索引:

public class LogIndex : AbstractIndexCreationTask<Log>
{
    public LogIndex()
    {
        Map = xs => from x in xs
                    select new
                    {
                        x.Id,
                        x.Action,
                        x.Message 
                    };
    }
}

然后我可以使用它们来存储日志,我可以使用context.Query<Log, LogIndex>().Where(x => x.Action== "GetString").ToList()来获取日志。

然后我尝试使用命令查询我的日志:

QueryResult queryResult = context.Advanced.DocumentStore.DatabaseCommands.Query("LogIndex", new IndexQuery
    {
        Query = "Action:(GetString)"
    });
Log log = queryResult.Results.First().ToObject<Log>();

我的问题是: ToObject<Log>()返回的日志会丢失其ID属性的值(为0)。但它的行动和消息属性的价值不会丢失..

使用RavenJObject.ToObject<T>()正确的方式获取查询结果(实体)?如果是,我的代码有什么问题?如果不是,这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

不,这不是正确的方法。 首先,您使用的是非常低级的API,并且应该使用会话。

如果您要使用会话,则会正确设置ID。