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。
我有一个实体类型:
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。