RavenDb: RavenJObject.ToObject<T>() 丢失了 ID

RavenDb: RavenJObject.ToObject<T>() lost Id

我有一个实体类型:

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)。但是它的 Action 和 Message 属性 的值并没有丢失..

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

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

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