Я пишу оболочку для определенных функций mongodb, чтобы обеспечить соблюдение определенных политик ведения бизнеса (таких как дата последнего изменения, версия документа и т. Д.). Эти дополнительные поля не будут отображаться в модели и будут неактуальными и прозрачными для лица, реализующего эту библиотеку. Эта библиотека будет общей.
Поэтому использование replaceOne
исключено.
Мне бы хотелось, чтобы какой-то способ передачи всех полей объекта, переданного человеком, в построитель обновлений, поэтому я могу соответственно использовать .Set / .Inc для добавления других полей.
Ниже приведен пример, демонстрирующий, что я хочу:
public static async Task UpdatePerson(string name, Person person)
{
var client = new MongoClient("mongodb://localhost:27017");
IMongoDatabase db = client.GetDatabase("test");
IMongoCollection<Person> collection = db.GetCollection<Person>("people");
var query = Builders<Person>.Filter
.Eq("name", name);
var update = Builders<Person>.Update
//Something here - how do I pass my person's properties?
.Set("lastModified", DateTime.Now)
.Inc("version",1);
await collection.UpdateOneAsync(query, update );
}
//--
//In real life this'll work for other types, this is for demonstration only
public class Person
{
public string name {get;set;}
public string surname {get;set;}
}
Итак, как я могу это сделать, например, не просматривая свойства с помощью Reflection?