Итак, я позволю себе провести несколько тестов с вашими примерами @Jamie Ide @Darius Kucinskas @Dmitry

Итак:
var exists = session
.CreateQuery("select 1 from Widget where _color = 'green'")
.SetMaxResults(1)
.UniqueResult<Int32?>()
.HasValue;
в моем случае был 18% быстрее, чем
bool exist = session.Query<Employee>()
.Any(x => x.EmployeeID == 1);
14% чем
bool exist = session.Query<Employee>()
.Count(x => x.EmployeeID == 1) > 0;
и 8%
bool exist = session.QueryOver<Employee>()
.Where(x => x.EmployeeID == 1)
.RowCount() > 0;
Так что, на мой взгляд, даже если жестко закодированный запрос является самым быстрым,
bool exist = session.QueryOver<Employee>()
.Where(x => x.EmployeeID == 1)
.RowCount() > 0;
- лучший вариант из-за хороших привычек и четкости кода