RavenDB 2.5 LoadByUniqueConstraint无法加载

时间:2016-01-27 12:50:08

标签: c# ravendb

这是reproduction

使用build 2.5.2910

所以我们以正常的方式在数据库中存储一个成员:

await session.StoreAsync(member)

我可以在

时以该成员身份登录
await session.LoadByUniqueConstraintAsync<Member>(m => m.Email, email)

然后我批量更新电子邮件地址(批次只包含那个电子邮件地址)

for (var batch = 0; (records = allRecords.Skip(batch * BatchSize).Take(BatchSize).ToList()).Any(); batch++) 
{
    using(var querySession = this.documentStore.OpenSession()) 
    {
        var existingMembers = session.Query<Member, Member_ByEmail> ().Where(m => m.Email.In(records.Select(r => r.OldEmailAddress))).ToDictionary(m => m.Email, m => m);

        using(var bulkInsertOperation = this.documentStore.BulkInsert(this.systemConfiguration.DatabaseName, new BulkInsertOptions { CheckForUpdates = true })) 
        {
            foreach(var member in records) 
            {
                var existingMemberKey = member.OldEmailAddress;
                var existingMemberRecord = existingMembers[existingMemberKey];
                existingMemberRecord.Email = member.EmailAddress;
            }
        }
    }
}

当我尝试使用新的电子邮件地址再次登录时,此行:

await session.LoadByUniqueConstraintAsync<Member>(m => m.Email, email)

返回null ....

我已检查过正在使用的新电子邮件是否与数据库中的电子邮件相同。数据库显示新的数据库。我已经使用了数据库界面并查询了新电子邮件的索引,并且有效。

我已将数据库设置为使用等待非陈旧结果以及:

store.Conventions.DefaultQueryingConsistency = ConsistencyOptions.AlwaysWaitForNonStaleResultsAsOfLastWrite;

这些选项都没有奏效。

我想知道我是否有一些与批量插入操作有关的特殊内容,以便让.NET客户端读取这封新电子邮件的索引。

我已经在运行时钻进了session变量,发现有一个已知的缺失id字段,其中包含以下值:

"UniqueConstraints/members/email/Ym1hcmxleTFAbmV3b3JiaXQuY28udWs="

1 个答案:

答案 0 :(得分:1)

您需要下载Raven插件Raven.Bundles.UniqueConstraints.dll并将其添加到Raven安装文件夹(在我的情况下为\Plugins\)的D:\RavenDB\Plugins目录中

执行完此操作后,您将需要重新插入记录(我删除了数据库并重新播种了。)