RavenDb:RavenObject.ToObject()丢失了Id

RavenDb:RavenObject.ToObject()丢失了Id,ravendb,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() { M

我有一个实体类型:

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.Wherex=>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返回的日志将丢失其Id属性的值它是0。但它的操作和消息属性的值不会丢失


使用RavenJObject.ToObject是获取查询结果的正确方法吗?如果是,我的代码有什么问题?如果不是,哪种方法是正确的?

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

如果要使用会话,它将负责正确设置ID