삭제하는 가장 쉬운 방법은 무엇입니까 모든 첨부 파일을 RavenDB 데이터베이스에서 가져 옵니까?첨부 파일 모두 삭제
.NET API를 사용하고 있지만 원시 HTTP 호출을 할 수 있습니다.
삭제하는 가장 쉬운 방법은 무엇입니까 모든 첨부 파일을 RavenDB 데이터베이스에서 가져 옵니까?첨부 파일 모두 삭제
.NET API를 사용하고 있지만 원시 HTTP 호출을 할 수 있습니다.
이렇게하면 데이터베이스의 모든 첨부 파일을 한 번에 하나씩 삭제합니다.
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);
}
}
큰 페이지 크기를 사용하면 약간은 최적화 할 수 있지만 어쨌든 삭제할 수 있으므로 그다지 중요하지 않습니다.
내 지식으로는 데이터베이스에 대한 모든 첨부 파일을 가져 오는 기본 제공 옵션이 없습니다. 하지만 다음을 할 수 있습니다 :
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; }
}
좋은 답변이지만, GetAttachmentHeadersStartingWith'에이 함수가 * 존재 *합니다. 모든 것을 원할 경우 빈 문자열을 사용할 수 있습니다. 아직도, HTTP API의 out-of-the-box 사고 및 사용을 보는 것이 좋다. 잘 하셨어요. –