Обработка внутренних изменений класса в коллекции - PullRequest
0 голосов
/ 11 ноября 2019

Я не знаю, как это правильно объяснить, но у меня есть коллекция классов:

using (var db = new LiteDatabase(@"MyData.db")) {
var _collection = db.GetCollection<TestClass>("mycollection");
}


public class TestClass
{
    public TestClass() {
        Task.Run(() => {
                     SomeProperty = ...; //Request to update value from outside
                 });
    }
    public int Id { get; set; }
    public string SomeProperty { get; set; } = String.Empty;
}

Как видите, класс меняет свои свойства после создания экземпляра изнутри.

Как, после изменения свойства, сохранить его обратно в базу данных, но с новым свойством?


PS Если я недостаточно хорошо объяснил вопрос или выбрал неправильныйпуть изначально - напиши об этом

1 Ответ

1 голос
/ 14 ноября 2019

Лучший способ изменить существующие данные при изменении класса сущности - это использовать BsonDocument абстрактную модель документа. Используя BsonDocument, вы можете изменить поля в виде строки и реализовать правила для обновления вашей модели, например:

public LiteDatabase OpenDatabase()
{
    var db = new LiteDatabase("data.db");

    // check for database version
    if (db.UserVersion == 0)
    {
        var col = db.GetCollection("mycollection");

        foreach(var doc in col.FindAll())
        {
            doc["NewProperty"] = doc["OldProperty"];

            doc.RemoveKey("OldProperty");

            col.Update(doc);
        }

        db.UserVersion = 1;
    }

    return db;
}
...