Я опубликовал подобную проблему здесь и в итоге отбросил спящий режим (однако по несвязанным причинам). Я не думаю, что LINQ действительно «закончен» в спящем режиме, но есть еще несколько методов, т.е. Enumerable (), которые выдают не реализованное исключение.
Однако, чтобы ответить на ваш вопрос, я обнаружил, что ДОЛЖЕН использовать конкретные классы, а не интерфейсы, потому что для интерфейса нет файла * .hbm.xml, поэтому hibernate не знает, как сопоставить интерфейс с соответствующей таблицей. Как кто-то сказал в моем посте, я, вероятно, слишком далеко зашёл об этой слабой связи, поскольку вы должны использовать только слабую связь и инверсию управления в областях, где потенциально много изменений - но да, модели баз данных действительно сильно меняются.
Я думаю, что ключом здесь является то, чтобы убедиться, что ваш бизнес-домен находится в собственной сборке «MyBusiness.Domain», и чтобы все проекты ссылались на него. Во всех этих проектах будут определены интерфейсы (проектирование по контракту) и конкретные классы, которые будут внедрены с использованием чего-то вроде Ninject. Таким образом, вы можете создавать новые классы в своей бизнес-области и при условии, что они реализуют соответствующие интерфейсы, которые ваши проекты могут использовать.
Как вы видите, я не эксперт в этом ... пока ... но я думаю, что этот способ разработки программного обеспечения в основном делает это правильно, и это довольно сложно с самого начала!