2013-11-15 2 views
3

삭제하는 가장 쉬운 방법은 무엇입니까 모든 첨부 파일을 RavenDB 데이터베이스에서 가져 옵니까?첨부 파일 모두 삭제

.NET API를 사용하고 있지만 원시 HTTP 호출을 할 수 있습니다.

답변

3

이렇게하면 데이터베이스의 모든 첨부 파일을 한 번에 하나씩 삭제합니다.

private void DeleteAllAttachments(IDocumentStore store) 
{ 
    while (true) 
    { 
     var header = store.DatabaseCommands 
      .GetAttachmentHeadersStartingWith("", 0, 1) 
      .FirstOrDefault(); 
     if (header == null) return; 
     store.DatabaseCommands.DeleteAttachment(header.Key, null); 
    } 
} 

큰 페이지 크기를 사용하면 약간은 최적화 할 수 있지만 어쨌든 삭제할 수 있으므로 그다지 중요하지 않습니다.

1

내 지식으로는 데이터베이스에 대한 모든 첨부 파일을 가져 오는 기본 제공 옵션이 없습니다. 하지만 다음을 할 수 있습니다 :

var client = new HttpClient(); 
client.BaseAddress = new Uri("http://localhost:8080"); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*")); 
HttpResponseMessage response = client.GetAsync("databases/YourDatabaseName/static").Result; 
response.EnsureSuccessStatusCode(); 
var files = response.Content.ReadAsAsync<IList<AttachmentInformation>>().Result; 

foreach (var fileDetail in files) 
{ 
    store.DatabaseCommands.DeleteAttachment(fileDetail.Key, null); 
} 

이 작업을 수행하려면 다음과 같은 POCO가 필요합니다. Microsoft.AspNet.WebApi.Client v5에 대한 참조입니다. ReadAsString을 수행하고 응답 내용을 직접 또는 다른 json 파서로 구문 분석하는 경우이 요구 사항을 제거 할 수 있습니다.

public class AttachmentInformation 
{ 
    /// <summary> 
    ///  Gets or sets the size. 
    /// </summary> 
    /// <value>The size.</value> 
    public int Size { get; set; } 

    /// <summary> 
    ///  Gets or sets the key. 
    /// </summary> 
    /// <value>The key.</value> 
    public string Key { get; set; } 

    /// <summary> 
    ///  Gets or sets the metadata. 
    /// </summary> 
    /// <value>The metadata.</value> 
    public object Metadata { get; set; } 

    /// <summary> 
    ///  Gets or sets the etag. 
    /// </summary> 
    /// <value>The etag.</value> 
    public Guid Etag { get; set; } 
} 
+1

좋은 답변이지만, GetAttachmentHeadersStartingWith'에이 함수가 * 존재 *합니다. 모든 것을 원할 경우 빈 문자열을 사용할 수 있습니다. 아직도, HTTP API의 out-of-the-box 사고 및 사용을 보는 것이 좋다. 잘 하셨어요. –