首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LiteDB更新集

LiteDB更新集
EN

Stack Overflow用户
提问于 2019-04-12 09:18:15
回答 1查看 4.9K关注 0票数 1

我正在测试LiteDB数据库,但在更新数据方面有问题。让我们考虑一下源代码:

代码语言:javascript
复制
    public class Session
    {
        [BsonId]
        public int Id { get; set; }
        public Guid SessionGuid { get; set; }
        public DateTime Date { get; set; }
        public double TotalAmount { get; set; }

        [BsonRef("paymentInfos")]
        public PaymentInfo PaymentInfos { get; set; }
    }

    public class PaymentInfo
    {
        [BsonId] 
        public int Id { get; set; }
        public string Type { get; set; }
        public double Amount { get; set; }    
    }

_database = new LiteDatabase(databasePath);

var sessions = _database.GetCollection<Session>("sessions");

var sessionId = Guid.NewGuid();
var session = new Session
{
    SessionGuid = sessionId,
    Date = Datetime.Now
};
sessions.Insert(session);


var sessions = _database.GetCollection<Session>("sessions");
var session = sessions.FindOne(x => x.SessionGuid == sessionId);

var paymentInfo = new PaymentInfo
{
    Type = "Coin",
    Amount = 2.0,
};

var paymentInfos = _database.GetCollection<PaymentInfo>("paymentInfos");
paymentInfos.Insert(paymentInfo);

session.PaymentInfos = paymentInfo;
sessions.Update(session);

session = sessions.FindOne(x => x.SessionGuid == sessionId);
var paymentAmount = session.PaymentInfos.Amount;

我原以为paymentAmount将是2.0,但它只是0。就像只有session.PaymentInfos.Id是好的,但是其他所有的属性都已经丢失了。我的会话更新有问题吗?也许我漏掉了什么?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-17 17:50:27

在处理集合引用时,需要对另一个集合进行Includesessions.Include(x=>x.PaymentInfos).FindOne(x => x.SessionGuid == sessionId)

LiteDb文档描述了您所看到的行为:

如果在查询中不使用Include,则类只加载ID集(所有其他属性都保留默认值/空值)。

尽管如此,最好避免使用DbRef。LiteDb是一个非关系数据库,与传统的SQL数据库相比,它从不同的模式中获益。引用关于堆栈交换应答的NoSql最佳实践:

适合于NoSQL数据库设计的方法是领域驱动设计。对于一些曾经设计关系数据库管理系统的人来说,NoSql看起来像,在DDD的范围内考虑它更有意义。

当我第一次从SQL切换到LiteDB时,我从使用DbRef开始,并对所有内容使用单独的集合。随着时间的推移,我有了更多的非关系思考的实践,我发现我正在研究的用例(位于3d空间中的对象之间的关系)可以通过在对象中存储信息来更精确地建模,而不是使用单独的集合和DbRef

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55648335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档