private void AddEntity_SuccessEvent(object sender, RepositoryEventArgs args) { if (args.NewEntityId == Guid.Empty) { throw new ArgumentNullException("AddEntity_SuccessEvent=>EntityId"); } var context = args.AccessDbContext as AddPropertyOwnerContext <TEntity, TPropertyValueEntity>; if (context == null) { return; } if (context.Values == null || !context.Values.Any()) { return; } var values = context.Values.ToList(); values.ForEach(value => { value.UserId = context.UserId; value.SetInstance(args.NewEntityId); }); var valueContext = new SetPropertyValueContext <TPropertyValueEntity> { ContextProvider = _contextProvider, InstanceId = args.NewEntityId, KeyProperty = _propertyValueKeyProviderSelector.Select().Provide <TPropertyValueEntity>(), UserId = context.UserId, PropertyValues = values }; _repositoryProviderProvider.Provide <IPropertyValueSetRepository>().Provide().SetValues(valueContext); }
public virtual void SetValues <TPropertyValueEntity>(SetPropertyValueContext <TPropertyValueEntity> context) where TPropertyValueEntity : PropertyValueEntity { using (var db = context.ContextProvider.Provide()) { var predicate = context.CreatePredicate(); var values = db.Set <TPropertyValueEntity>() .Where(s => s.UserId == context.UserId) .Where(predicate) .ToList(); context.PropertyValues.ToList() .ForEach( value => { var current = values.FirstOrDefault(s => s.PropertyId == value.PropertyId); if (current == null) { db.Set <TPropertyValueEntity>().Add(value); } else { current.Value = value.Value; } }); db.SaveChanges(); } }