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; } } } }
public SqlRepository(SqlDbContext context) { _context = context; _dbSet = _context.Set <TEntity>(); }