public UpdateResult UpdateOne <T>(Expression <Func <T, bool> > filter, UpdateDefinition <T> updateDef, UpdateOptions options = null) where T : IMongoEntity { T oldValue = default(T); bool writeLog = ShouldWriteLog <T>(); if (writeLog) { oldValue = Find(filter).FirstOrDefault(); } var res = GetCollection <T>().UpdateOne(filter, updateDef, options); if (oldValue != null) { UpdateActivity updateActivity = new UpdateActivity(GetUserNameFunc()) { CollectionName = GetCollectionName(typeof(T)), ObjId = oldValue.Id }; T newValue = FindById <T>(oldValue.Id); updateActivity.SetDiff(oldValue, newValue); Save((UserActivity)updateActivity); } return(res); }
public void Save <T>(T item) where T : IMongoEntity { bool writeLog = DefaultWriteLog; bool preprocess = DefaultPreprocess; Type type = typeof(T); CollectionSaveAttribute attr = GetSaveAttribute(type); if (attr != null) { writeLog = attr.WriteLog; preprocess = attr.Preprocess; } if (preprocess && objectPreprocessor != null) { objectPreprocessor.Preprocess(item); } ActivityType activityType; T oldValue = default(T); if (item.Id == null) { GetCollection <T>().InsertOne(item); activityType = ActivityType.Insert; } else { if (writeLog) { oldValue = FindById <T>(item.Id); } GetCollection <T>().ReplaceOne(t => t.Id == item.Id, item, new ReplaceOptions { IsUpsert = true }); activityType = ActivityType.Update; } if (writeLog) { string username = GetUserNameFunc(); if (activityType == ActivityType.Insert) { var insertActivity = new InsertActivity(username) { CollectionName = GetCollectionName(type), ObjId = item.Id }; Save((UserActivity)insertActivity); } else { UpdateActivity update = new UpdateActivity(username) { CollectionName = GetCollectionName(type), ObjId = oldValue.Id }; update.SetDiff(oldValue, item); if (update.Diff.Count > 0) { Save((UserActivity)update); } } } }