Откуда оно знает, что нужно в сущностях «products» сохранять\искать? Оно парсит имя класса когда сохраняет? Поподробнее сказали бы о том, как оно сохраняет класс. Вижу что метаданных нету в нем о том, какие поля сохранять и как. Просто запихивается и извлекается как из волшебной коробки.
Что хорошо насчет RavenDB — так это то, что это .NET, за счет чего получается отличный уровень интеграции в общую экосистему дотнета, и может быть для .NET эта база когда-нибудь станет де-факто NoSQL-решением.
Но на данный момент как-то попроще и приятнее в работе (при не меньшей функциональности) показались MongoDB + NoRM. Вот уж где буквально — никаких лишних усилий.
В Mongo нет транзакций и есть риск потерять данные, т.к. запись на диск отложенная. В общем, нет silver bullet на все случаи жизни. По Raven надо немного подождать, в Rhino Mocks тоже никто не верил, когда он их только сделал. )
В MongoDB нет риска потерять данные, т.к. никто не запрещает делать fsync после каждой записи критичных данных (которых в большинстве приложений не так уж и много). Риск потерять данные есть только при запуске MongoDB без репликации, чего никто в здравом уме не будет делать на продакшене.
А от транзакций отказывается практически любой, кто хочет одновременно производительности и масштабируемости.
Hello, RavenDB