我喜欢在ravenDB中存储一个对象是多么干净,但是有一个实际的问题,我不确定最好的答案。
假设我有报价请求:
QuoteRequest.cs
int Id;
dateTime DateCreated;
List<Quotes> Quotes;
Quote.cs
int ProviderId;
int Price;
int ServiceDays;
int ServiceTypeId;
当有人点击某个页面时,我会吐出一个他们可以选择的引号列表。这些引号仅与引用请求的实例相关。
我的问题是,由于子对象(例如列表中的引用)没有数据库生成的Id,如何生成查询字符串以让下一页知道用户想要购买哪个引用?
一个providerId可能有多个引号。
我的想法是添加一个QuoteId并根据this.Quotes.Count递增它,但这似乎有点hacky,或生成一个随机数,也有点hacky。
人们通常如何处理这样的事情?
答案 0 :(得分:2)
您是否真的需要将购买(用户选择购买的产品)与原始报价相关联?我猜你拿这个报价,然后将其转换为购买。 如果是这样,那么根本不要担心id。只需将组成值传递给下一步。换句话说,将引用视为DDD意义上的值。
但是,如果你做需要存储购买关联......那么这取决于你真正需要跟踪的内容。例如,您可以更新QuoteRequest,标记所选报价。 (添加一个IsSelected或类似于报价类Quote的东西。)然后购买可以链接回报价请求,你可以通过标志识别报价。
同样,所有这些都取决于上下文(我只是在猜测)。
答案 1 :(得分:1)
既然没有人回答这个问题,我只会说我会怎么做;
为什么要添加ID?只是使用List的索引?它的请求是“?quote = 0”,他们得到位置0的报价?
不太确定如果我在这里找不到东西......
答案 2 :(得分: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%正确,但至少应该让你知道如何做到这一点!