Exemple #1
0
        public void Update(TEntity entity)
        {
            var properties =
                entity.GetType()
                .GetProperties()
                .Where(p => p.PropertyType.GetInterface(typeof(IEntity).Name, true) != null ||
                       p.PropertyType.GetInterface(typeof(IEnumerable).Name, true) != null);

            foreach (var prop in properties)
            {
                var nestedProperty = prop.GetValue(entity);

                if (nestedProperty is IEnumerable)
                {
                    foreach (var item in (IEnumerable)nestedProperty)
                    {
                        if (!(item is IEntity))
                        {
                            break;
                        }

                        DbEntityEntry nestedEntry = _context.Entry(item);

                        if (nestedEntry.State == EntityState.Detached)
                        {
                            _context.Set(item.GetType()).Attach(item);
                        }

                        nestedEntry.State = EntityState.Modified;
                    }
                }
                else
                {
                    if (nestedProperty != null)
                    {
                        DbEntityEntry nestedEntry = _context.Entry(nestedProperty);

                        if (nestedEntry.State == EntityState.Detached)
                        {
                            _context.Set(nestedProperty.GetType()).Attach(nestedProperty);
                        }

                        nestedEntry.State = EntityState.Modified;
                    }
                }
            }
        }
Exemple #2
0
 public SqlRepository(SqlDbContext context)
 {
     _context = context;
     _dbSet   = _context.Set <TEntity>();
 }