0

我做了很多研究,但我找不到和我有同样问题的人(很遗憾)。我正在使用LiteDB创建 NoSQL 数据库。

当程序第一次运行并创建数据库时,下面示例中的查询工作正常。当我重新启动程序时,它失败说它为空。奇怪的是,如果我进行计数,它会返回 8 条记录。所以有些东西存在——为什么我不能把它拉出来?

这是我的代码:

public class ExternalTools
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string[] Types { get; set; }
}

public void GetAll()
{
     var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
     var folderPath = localFolder.Path;
     var filePath = Path.Combine(folderPath, @"MyData4.db");

     using (var db = new LiteDatabase(filePath))
     {
          Tools = db.GetCollection<ExternalTools>("externalTools");

          if (Tools.Count() == 0)
          {
              CreateToolList();

              // Index document using document Name property
              Tools.EnsureIndex(x => x.Name);
            }
      }

      Debug.WriteLine(Tools.Count());
      var temp = Tools.FindAll(); // null error
      var test = Tools.FindById(1); // another null error
      Debug.WriteLine(test.Name); //

}

谢谢!

4

1 回答 1

0

好吧,我想通了(浪费了这么多时间的调试!)我的代码在错误的位置,如果我将它移到 using 语句中,它就可以正常工作。我怀疑这与第一次运行时将内容添加到集合中的事实有关,因此它具有适当的参考。无论如何,此代码有效:

        using (var db = new LiteDatabase(filePath))
        {
            Tools = db.GetCollection<ExternalTools>("externalTools");

            if (Tools.Count() == 0)
            {
                CreateToolList();

                // Index document using document Name property
                Tools.EnsureIndex(x => x.Name);
            }

            Debug.WriteLine(Tools.Count());
            var temp = Tools.FindAll(); // null error
            var test = Tools.FindById(1); // another null error
            Debug.WriteLine(test.Name); //
        }
于 2018-06-25T18:12:30.720 回答