Пример #1
0
        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();
     }
 }