我刚刚将一个项目从 RavenDB 3.5 升级到 4.0,我注意到的最大变化之一是它们改变了 Id 的生成方式。
在我的项目中,大多数集合都有一个基本的 id 结构,如“[collection name]/[progressive id]”,其中progressive id 是一个整数,而不是新的默认值“[progressive]-[node]”。根据文档,我将新文档的模式 ID 指定为“[集合名称]|” 并且实际上正在生成唯一/渐进/整数ID。
问题是当我必须以事务方式保存 2 个或更多文档并在它们之间引用它们时。假设我有两种对象:
用户实体
{
"Id": "users/1",
...
}
用户地址实体
{
"Id": "userAddresses/1",
"UserId": "users/1",
...
}
在第二个文档中,我需要通过 UserId 字段引用第一个文档。
在 4.0 版本之前,我能够在同一个事务中执行以下操作:
User newUser = new User();
session.Store(newUser)
UserAddress newUserAddress = new UserAddress();
newUserAddress.UserId = newUser.Id;
session.Store(newUserAddress);
session.SaveChanges();
在session.Store(newUser)之后,如果我访问newUser.Id属性,我能够看到生成的 Id。现在我只看到“用户|”,我必须在 SaveChanges() 之后等待才能看到生成的 Id。
这种行为似乎只发生在 Identities Id 上,如果我使用 id 结构“[collection name]/[progressive]-[node]”,我可以在 Store() 之后立即看到生成的 id。
是设计使然吗?有没有办法强制旧行为?或者我如何使用渐进式/整数 id 以事务方式管理像这样的情况?