Я использую драйвер MongoDB C # для связи с экземпляром Mongo Atlas.
Я реструктурирую схему нескольких документов и хочу использовать ISupportInitilize, чтобы прочитать некоторые дополнительные элементы и преобразовать их в новую ожидаемую схему.
Это старое определение документа:
public class ImageDocument : DocumentBase, ISupportInitialize
{
[BsonExtraElements]
public Dictionary<string, object> ExtraElements;
//Other elements omitted for brevity.
public string AzureImageId { get; set; }
public string AzureImageUrl { get; set; }
public void BeginInit()
{
}
public void EndInit()
{
}
}
Вот новое определение документа:
public class ImageDocument : DocumentBase, ISupportInitialize
{
[BsonExtraElements]
public Dictionary<string, object> ExtraElements;
//Other elements omitted for brevity
public AzureImageInformationPage Original { get; set; } //Original, as uploaded
public void BeginInit()
{
}
public void EndInit()
{
if (Original == null)
{
Original = new AzureImageInformationPage {
AzureImageId = ExtraElements.GetValueOrDefault("AzureImageId").ToString(),
ImageUrl = ExtraElements.GetValueOrDefault("ImageUrl").ToString()
};
}
}
}
По какой-то причине метод EndInit никогда не вызывается, хотя в документации MongoDB говорится, что это должно произойти автоматически .
Я использую следующий код для взаимодействия с драйвером MongoDB C #:
public async Task<IList<T>> RetrieveAll<T>() where T : DocumentBase
{
return await GetCollection<T>().AsQueryable().ToListAsync();
}
public async Task<IList<T>> RetrieveWhere<T>(Expression<Func<T, bool>> query) where T : DocumentBase
{
return await GetCollection<T>().AsQueryable().Where(query).ToListAsync();
}
public async Task<T> RetrieveSingle<T>(Expression<Func<T, bool>> query) where T : DocumentBase
{
return await GetCollection<T>().AsQueryable().SingleOrDefaultAsync(query);
}
private IMongoCollection<T> GetCollection<T>() where T : DocumentBase
{
//Slightly modified from the real code, so it's easy to read.
var collectionName = typeof(T).Name.Replace("Document", string.Empty);
//Database name is hardcoded for now.
var database = mongoClient.GetDatabase("MyDb");
return database.GetCollection<T>(collectionName);
}
Как получить драйвер MongoDB для вызова методов ISupportInitialize?
Заранее спасибо за помощь.