4

我喜欢对象存储在 ravenDB 中的干净程度,但有一个实际问题我不确定最佳答案。

假设我有一个报价请求:

报价请求.cs

int Id;
dateTime DateCreated;
List<Quotes> Quotes;

报价单.cs

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

当有人点击一个页面时,我会吐出一个他们可以从中选择的引用列表。这些报价仅与报价请求的一个实例相关。

我的问题是,由于子对象(例如列表中的报价)没有数据库生成的 Id,我如何生成查询字符串以让下一页知道用户想要购买哪个报价?

一个 providerId 可能有多个引号。

我的想法是添加一个 QuoteId 并根据 this.Quotes.Count 增加它,但这似乎有点 hacky,或者生成一个随机数,也有点 hacky。

人们通常如何处理这样的事情?

4

3 回答 3

2

你真的需要将购买(用户选择购买的东西)与原始报价相关联吗?我猜你接受了报价,然后将其转换为购买。如果是这样,那么根本不用担心 id。只需将组成值传递到下一步。换句话说,将引用视为 DDD 意义上的值。

但是,如果您确实需要存储与购买的关联……那么,这取决于您真正需要跟踪的内容。例如,您可以只更新 QuoteRequest,标记选定的报价。(添加一个 IsSelected 或类似于报价类 Quote 的东西。)然后可以将购买链接回报价请求,您可以通过标志识别报价。

同样,所有这些都取决于上下文(我只是对此进行猜测)。

于 2011-03-18T02:31:35.490 回答
1

由于没有人回答这个问题,我只会说我会怎么做;

为什么要添加一个ID?只使用列表的索引?如果请求是“?quote = 0”,他们会在位置0获得报价吗?

不太确定如果我在这里没有得到任何东西......

于 2011-02-09T16:23:53.377 回答
0

一种选择是让父对象存储最后使用的 id。添加新的子对象时,您会增加 id-counter 并将其添加到子对象。保存对象时,id-counter 会自动递增。

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

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

...

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

session.SaveChanges();

上面的代码可能不是 100% 正确,但至少应该让您知道如何去做!

于 2013-04-30T21:52:37.533 回答