Вы можете создать один метод, и он будет принимать делегата в качестве параметра, который определяет действие, которое вы хотите выполнить.
private void DatabaseAction<T>(T entity, Action<T> action)
{
using (var transaction = Session.BeginTransaction())
{
if (entity is IEnumerable)
{
foreach (var item in (IEnumerable) entity)
{
action(item);
}
}
else
{
action(item);
}
transaction.Commit();
}
}
Затем проведите рефакторинг ваших 3 методов:
public void Add<T>(T entity)
{
DatabaseAction(entity, item => Session.Save(item));
}
public void Update<T>(T entity)
{
DatabaseAction(entity, item => Session.Update(item));
}
public void Delete<T>(T entity)
{
DatabaseAction(entity, item => Session.Delete(item));
}