2011-05-03 25 views
9

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 đỡ!

+0

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

+0

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? –

+0

Ở mức nào, câu trả lời của roja là đúng –

Trả lời

Các vấn đề liên quan