RavenDB中子文档的ID

4
我很喜欢RavenDB中对象的清晰存储方式,但是我有一个实际问题,我不确定最好的答案是什么。
假设我有一个报价请求:
QuoteRequest.cs
int Id;
dateTime DateCreated;
List<Quotes> Quotes;

Quote.cs

int ProviderId;
int Price;
int ServiceDays;
int ServiceTypeId;

当有人访问页面时,我会列出一系列报价供他们选择。这些报价只与报价请求的实例相关联。
我的问题是,由于列表中的子对象(如报价)没有由数据库生成的ID,那么我该如何生成一个查询字符串来让下一页知道用户想要购买哪个报价?
可能会有多个提供商ID的报价。
我的想法是添加一个QuoteId,并根据this.Quotes.Count递增它,但这似乎有点糊弄人,或者生成一个随机数,也有点糊弄人。
人们通常如何处理这种情况?
3个回答

2
你真的需要将购买(用户选择购买的内容)与原始报价相关联吗?我猜你会取报价,然后将其转换为购买。如果是这样的话,那么根本不需要关注id。只需将组成部分的值传递到下一步即可。换句话说,像DDD中的Value一样处理报价。
但是,如果你确实需要存储与购买有关的信息......那就取决于你真正需要跟踪的是什么。例如,你可以更新QuoteRequest,标记所选的报价(在报价类“Quote”中添加类似IsSelected的标志)。然后,购买可以链接回报价请求,并且你可以通过标志来识别报价。
再次强调,所有这些都取决于上下文(我只是对此进行了猜测)。

这是最好的答案,所以我打算授予它。我确实需要与原始引用相关联,所以最终我想出了如何强制子文档创建一个ID - 尽管我相信有文档数据库/领域驱动设计纯粹主义者会感到不安。谢谢! - ChickenMilkBomb

1

既然还没有人回答,我就说一下我会怎么做;

为什么要添加一个Id?直接使用List的索引不就可以了吗?如果请求是“?quote=0”,他们就会得到位置0处的引用?

不太确定我是否理解错了什么...


0

一种选择是让父对象存储上一个使用的ID。当添加新的子对象时,您会增加ID计数器并将其添加到子对象中。当保存对象时,ID计数器会自动递增。

假设您有带有评论的博客文章:

public class Post
{
  public int NextCommentId;
  public List<Comment> Comments;
  ...
}

...

var comment = new Comment { Id = post.NextCommentId++ };
post.Comments.Add(comment);

session.SaveChanges();

上面的代码可能不是100%正确的,但至少应该给您一个如何完成它的想法!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接