Вот как я использовал наследование в Entity Framework (POCO):
ctx.Animals // base class instances (all instances)
ctx.Animals.OfType<Cat> // inherited class Cat's instances only
ctx.Animals.OfType<Dog> // inherited class Dog's instances only
Это единственный подобный способ, который я нашел в MongoDb (справочник по MongoDb ):
var query = Query.EQ("_t", "Cat");
var cursor = collection.FindAs<Animal>(query);
Обратите внимание, что в последнем случае мне приходится иметь дело с дискриминатором ("_t") и жестко задавать имя моего класса, что не совсем удобно и выглядит ужасно. Если я пропущу запрос, я получу исключение при попытке перечисления. Я что-то пропустил? Мое предложение заключалось в том, что документ Db, который хранит объекты «как есть», должен легко обрабатывать наследование.