2017-07-14 21 views
0

我有一個實體類型:RavenDb:RavenJObject.ToObject <T>()失去了編號

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

不,這不是正確的方法。 首先,您使用的是非常低級別的API,並且應該使用此會話。

如果您使用會話,它將負責正確設置ID。