Что является самым простым способом очистить все вложения из базы данных 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. Хорошая работа. –