0

我正在尝试使用 C# 从 RavenDB 获取所有特定类型的记录。

当我使用 Lucene 时:

 var serviceTraces = session.Advanced.LuceneQuery<ServiceTrace>("IDLoadDateIndex").Take(50);

我得到的结果是:

serviceTraces.QueryResult.Results

当我不使用 Lucene 时:

var serviceTraces = session.Query<ServiceTrace>("IDLoadDateIndex").Take(50);

我没有得到任何结果,并且在尝试对“serviceTraces”对象执行“ToList()”时引发异常。

这是为什么 ?

更新:

服务跟踪类:

public class ServiceTrace
    {
        public ServiceTrace(ServiceDeployment sd)
        {
            // TODO: Complete member initialization
            this.ServiceDeploymentID = sd.Id;
        }

        public string Id { get; set; }
        public string TransactionID { get; set; }
        public string ParentTransactionID { get; set; }
        public string RequestID { get; set; }
        public int ApplicationCode { get; set; }
        public int InstituteCode { get; set; }
        public string ServiceDeploymentID { get; set; }
        public string UserHostAddress { get; set; }
        public string UserAgent { get; set; }
        public string Username { get; set; }
        public DateTime RequestDateTime { get; set; }
        public DateTime ResponseDateTime { get; set; }
        public string RequestBody { get; set; }
        public string ResponseBody { get; set; }
        public string Key1Value { get; set; }
        public string Key2Value { get; set; }
        public string Key3Value { get; set; }
        public string Key4Value { get; set; }
        public string Key5Value { get; set; }
        public int StatusCode { get; set; }
        public string StatusDescription { get; set; }
        public string FullExceptionText { get; set; }
        public DateTime LoadDate { get; set; }
        public DateTime ActivationDateTime { get; set; }
        public string HostAddress { get; set; }
        public string BpmID { get; set; }
        public DateTime PreProcessDatetime { get; set; }
        public string DestHostAddress { get; set; }
        public string ArchivePath { get; set; }
        public string BTInstanceID { get; set; }
        public string Temp1 { get; set; }
        public string ExternalComponentDuration { get; set; }
        public string SQLIdentity { get; set; }
        public string ExceptionCode { get; set; }
        public string CertificateID { get; set; }
        public string ExternalComponentType { get; set; }
        public string ActivationID { get; set; }
    }

IDLoadDateIndex:

public class IDLoadDateIndex : AbstractIndexCreationTask<ServiceTrace>
    {
        public IDLoadDateIndex()
        {
            Map = serviceTrace => from st in serviceTrace
                                  select new { LoadDate = st.LoadDate };
            Index(x => x.LoadDate, FieldIndexing.Analyzed);
        }
    }
4

2 回答 2

1

解决方案是添加一个默认构造函数:

public ServiceTrace()
{
}

因为从 RavenDB 获取数据时,引擎通过以下方式初始化一个新实例:

public ServiceTrace(ServiceDeployment sd)
        {
            // TODO: Complete member initialization
            this.ServiceDeploymentID = sd.Id;
        }

并且 ServiceDeployment 对象是一个空引用。

于 2013-05-08T14:42:13.910 回答
0

在这两种情况下,您都需要在 serviceTraces 上调用 ToList

于 2013-05-07T08:00:00.460 回答