使用LiteDB,这太棒了.它适用于加载和存储数据,但不适用于创建数据库后的后续加载.
在初始加载时,一切都很完美.它创建数据库并完美地存储新记录,并且查询返回空,因为该集合中尚不存在任何内容.
在后续加载时,在查询数据(工作并获得结果)之后,.Update()
导致此问题的问题.根据他们的文档,当没有指定'Id'时,它应该创建一个.从集合返回对象时,它不包含此"_Id"字段,因此无法更新数据库中的记录.
public class AuctionCache
{
public double lastModified { get; set; }
public string server { get; set; }
public AuctionCache() { }
}
private static bool IsCached(AuctionCache auction)
{
string filename = string.Format("{0}-{1}.json", auction.server, auction.lastModified);
bool cached = false;
try
{
using (LiteDatabase db = new LiteDatabase("cache.db"))
{
// Get customer collection
var auctions = db.GetCollection<AuctionCache>("auctions");
// Use Linq to query documents
try
{
var results = auctions.Find(x => x.server == auction.server).DefaultIfEmpty(null).Single();
if …
Run Code Online (Sandbox Code Playgroud) 我正在学习LiteDB - NoSQL.我已经完成了基本的例子.当我构建它时,它将生成数据库文件.现在,我只想阅读此文件以查看我存储的数据.有可能读取它就像我们可以看到MSSQL中的数据一样吗?如何查看存储的数据?
任何帮助表示赞赏.谢谢.
我想知道如何将 console.writeline 数据存储在我的 litedb 数据库文件中。这是我的 POCO 课程
[BsonId]
public int Id { get; set; }
public DateTime Updated { get; set; }
public DateTime Last { get; set; }
public override string ToString()
{
return string.Format("Id : {0}, Updated : {1}, Last Message : {2}",
Id,
Updated,
Last);
}
Run Code Online (Sandbox Code Playgroud)
我在数据库中插入信息:
using (var db = new LiteDatabase(_dbLocation))
{
var hist = db.GetCollection<MailBoxInfo>("History");
var mail = new MailBoxInfo
{
Updated = DateTime.Now,
Last = datemsg
};
hist.Insert(mail);
hist.EnsureIndex("Updated");
}
Run Code Online (Sandbox Code Playgroud)
最后,尝试输出它:
using (var …
Run Code Online (Sandbox Code Playgroud) 我希望我的实体框架 Dbcontext 类能够使用不同的 -2 数据库。它使用各自的数据提供程序与 SQL Server、MySql、SQLite 一起正常工作。但无法获取 LiteDB(no-sql)的任何数据提供程序。是否有任何有关 LiteDB 实体框架的文章或示例代码。
我有以下数据模型:
public class Customer
{
[BsonId]
public int CustomerId { get; set; }
public string Name { get; set; }
}
public class Order
{
[BsonId]
public int OrderId { get; set; }
[BsonRef("customers")]
public Customer Customer { get; set; }
}
public class Cart
{
[BsonId]
public int CartID { get; set; }
public List<Order> OrderList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我想通过查询我的购物车集合来访问客户。我尝试过这样的事情:
var collectionCarts = db.GetCollection<Cart>("carts");
var result = collectionCarts.Include("OrderList.Customer").Find(x => x.OrderList[0].Customer.CustomerId == 2);
Run Code Online (Sandbox Code Playgroud)
但是,所有尝试都会导致客户对象为空。我用 LiteDB-Viewer 检查的数据库似乎没问题。
我正在学习如何使用 LiteDB。这是我用来将 .Net 对象插入数据库的一些 C# 代码:
// Create new YacksProjectInfo object and insert it into the database
YacksProjectInfo projectInfo = new YacksProjectInfo(AssemblyName, moduleNumber);
yacksProjects.Insert(projectInfo); // Id field generated automatically
yacksProjects.EnsureIndex((YacksProjectInfo x) => x.ProjectName);
yacksProjects.EnsureIndex((YacksProjectInfo x) => x.ModuleNumber);
Run Code Online (Sandbox Code Playgroud)
换句话说,每次向数据库添加新对象时,我都使用了EnsureIndex() 方法。但我猜这不是必需的,您只需要在插入第一个对象后执行一次。
有人可以确认是否需要每次都执行 ensureIndex() ,或者一次就足够了吗?
插入时,偏移量正常,但是检索文档时,它会重置为 +00:00
财产:
public DateTimeOffset CreatedOn { get; set; }
Run Code Online (Sandbox Code Playgroud)
插入:
user.CreatedOn = DateTimeOffset.Now; // 01/20/2021 6:05:21 PM +05:30
col.Insert(user);
col.EnsureIndex(x => x.Username);
Run Code Online (Sandbox Code Playgroud)
寻找:
using (var db = _liteDbConnection.Create() as LiteDatabase)
{
var col = db.GetCollection<AuthUser>(USERS_COLLECTION);
return col.FindOne(x => x.UserId == userId);
}
Run Code Online (Sandbox Code Playgroud)
user.CreatedOn
变成
01/20/2021 6:05:21 PM +00:00
难道我做错了什么?
我如何像 SQL 示例一样在 LiteDb 中的两个表之间加入:我有两个表 User 和 ActivityLog
这是模型
public class ActivityLog
{
[BsonId]
public int Id { get; set; }
public string UserId { get; set; }
public string Action { get; set; }
public DateTime ActionDateTime { get; set; }
}
public class User
{
[BsonId]
public int Id { get; set; }
public string UserId { get; set; }
public string UserName { get; set; }
public DateTime LoginDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我需要加入 Activity.UserID = …
我正在考虑使用 LiteDb for C# 作为文档存储系统。
只要我知道文件的 ID,我就可以上传和下载 - 但我也希望能够选择搜索它。
LiteDb 文档提供了此命令,用于搜索存储在 Db 内特定“目录”中的所有文件;
var files = db.FileStorage.Find("$/photos/2014/");
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何处理 files 变量。我无法将其转换为可用的字符串等。
例如,我想将其添加到列表视图中。
有人有使用 LiteDb 和文件搜索的经验吗?
从以下(简化)接口开始,考虑到async/await,我想通过使用LiteDB数据库来实现它.
public interface IDataService
{
Task<User> GetUserAsync(int key);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,LiteDB目前不支持异步方法.所有方法都是同步的.
我尝试了以下内容,但后来遇到了一些问题(进程并没有真正等待任何原因).接下来,我读到你应该只Task.Run()
用于CPU绑定算法,因此不能用于数据库访问.
public Task<User> GetUserAsync(int key)
{
var task = Task.Run(() =>
{
return _users
.Find(x => x.Key == key)
.SingleOrDefault();
});
return task;
}
Run Code Online (Sandbox Code Playgroud)
即使我阅读了几篇博客文章和SO问题,我仍然不清楚如何为基于同步IO的代码制作一个正确编写的等待方法.
那么我该如何编写一个正确的等待方法呢?
注意:我无法更改界面.这是给出的.
我正在努力创建一种方法,将最后一个事务插入到 litedb 中。
我确实有一个日期字符串,已保存。
这是课程:
public class TransactionPair : TransactionTwo
{
private string returnT;
public TransactionPair() { /* making an empty declaration so we don't NEED to pass it anything if we don't want. */}
public TransactionPair(string returnT, string request)
{
this.returnT = returnT;
JObject o = JObject.Parse(returnT);
AuthCode = o.GetValue("AuthoCode").ToString();
TransType = o.GetValue("TransType").ToString();
AmountString = o.GetValue("AmountString").ToString();
CardType = o.GetValue("CardType").ToString();
Last4 = o.GetValue("Last4").ToString();
RefID = o.GetValue("RefID").ToString();
CardToken = o.GetValue("CardToken").ToString();
ExpDate = o.GetValue("ExpDate").ToString();
DateString = DateTime.Now.ToString("d-MMM-yyyy:HH:mm:ss.f", DateTimeFormatInfo.InvariantInfo);
Request = request;
} …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个带有多线程的小应用程序。我决定使用 LiteDB 来存储数据。我能够成功读取、更新、删除和插入我的数据库。但是,当我尝试添加另一个线程时,该线程也将使用相同的数据库和相同的表抛出异常说
System.IO.IOException: '进程无法访问文件'C:\Users\Soyuz\TestApp\bin\Debug\Soyuz.db',因为它正被另一个进程使用。'。
这就是我与数据库建立连接的方式:
using (var db = new LiteDatabase(@"Soyuz.db")) { }
Run Code Online (Sandbox Code Playgroud)
这里的文档说,LiteDB 提供 2 种类型的连接。我想我必须使用共享的,因为我必须从不同的线程访问同一个数据库。
https://www.litedb.org/docs/connection-string/
但是当我尝试这段代码时;
using (var db = new LiteDatabase(@"Soyuz.db; Connection=shared")) { }
Run Code Online (Sandbox Code Playgroud)
或者
using (var db = new LiteDatabase(@"Soyuz.db; Mode=Shared")) { }
Run Code Online (Sandbox Code Playgroud)
这一次,它抛出另一个异常说
System.ArgumentException: 'EngineSettings 必须将 Filename 或 DataStream 作为数据源'
有 LiteDB 经验的人可以帮我解决这个问题吗?
litedb ×12
c# ×10
.net ×3
linq ×2
nosql ×2
asp.net-core ×1
asp.net-mvc ×1
async-await ×1
c#-3.0 ×1
c#-4.0 ×1