Tôi đang sử dụng mẫu kho lưu trữ với Raven DB. giao diện kho lưu trữ của tôi làLàm cách nào để chờ kết quả được cập nhật trong RavenDB sau DELETE
public interface IRepository<T> where T : Entity
{
IEnumerable<T> Find(Func<T, bool> exp);
void Delete(T entity);
void Save();
...
}
Và thực hiện là
public class Repository<T> : IRepository<T> where T : Entity
{
public IEnumerable<T> Find(Func<T, bool> exp)
{
return session.Query<T>().Where(exp);
}
public void Delete(T entity)
{
session.Delete(entity);
}
public void Save()
{
session.SaveChanges();
}
...
}
Tôi có một bài kiểm tra đó đánh dấu tất cả các đối tượng để xóa, lưu các thay đổi và cơ sở dữ liệu truy vấn để xem nếu số lượng kết quả là zero
[Test]
public void DeleteValueTest()
{
//resolve repository
var repository = ContainerService.Instance.Resolve<IRepository<DummyType>>();
Func<DummyType, bool> dummyTypeExpr = item => item.GetType() == typeof(DummyType);
//find all entries of dummy types and mark for deletion
var items = repository.Find(dummyTypeExpr);
foreach (var item in items)
{
repository.Delete(item);
}
//commit changes
repository.Save();
//populate all dummy types, shall be nothing in there
items = repository.Find(dummyTypeExpr);
int actualCount = items.Count();
int expectedCount = 0;
Assert.AreEqual(expectedCount, actualCount);
}
Kiểm tra không thành công với đầu ra mẫu
RepositoryTest.DeleteValueTest : FailedExecuting query '' on index 'dynamic/DummyTypes' in 'http://localhost:8080'
Query returned 5/5 results
Saving 1 changes to http://localhost:8080
Executing query '' on index 'dynamic/DummyTypes' in 'http://localhost:8080'
Query returned 4/5 results
Expected: 0
But was: 4
Vấn đề là nếu tôi chạy thử nghiệm này một thời gian, các mục thực sự đang được gỡ bỏ (2-3 mục tại một thời điểm). Tôi thấy rằng có một IDocumentQuery có phương thức WaitForNonStaleResults.
IDocumentQuery<T> WaitForNonStaleResults();
Nhưng tôi không thể tìm thấy nó trong Raven.Client.Lightweight namespace đã được cài đặt bởi NuGet.
Để tổng hợp Làm cách nào để đợi cho đến khi cơ sở dữ liệu được cập nhật và làm cách nào để đọc dữ liệu mới. Tôi đang làm điều gì đó khủng khiếp sai? Cảm ơn bạn đã giúp đỡ!
Dường như _IDocumentQuery_ cùng một giao diện được định nghĩa khác nhau trong ** cùng ** namespace _Raven.Client_. Tuy nhiên, có hai assembly khác nhau cung cấp giao diện này: _Raven.Client.dll_ và _Raven.Client.Lightweight.dll_. NuGet cung cấp cho tôi thư viện sau. – oleksii
Raven.Client.dll chưa được sử dụng trong vài tháng, bạn đang sử dụng công cụ xây dựng nào? –
Ở mức nào, câu trả lời của roja là đúng –