Сохранение производных объектов с помощью драйвера Mongo C #

У меня следующая иерархия классов

[BsonKnownTypes(typeof(MoveCommand))]
public abstract class Command : ICommand
{
    public abstract string Name
    {
        get;
    }

    public abstract ICommandResult Execute();
}
    public class MoveCommand : Command
{
    public MoveCommand()
    {
        this.Id = ObjectId.GenerateNewId().ToString();
    }

    [BsonId]
    public string Id { get; set; }

    public override string Name
    {
        get { return "Move Command"; }
    }

    public override ICommandResult Execute()
    {
        return new CommandResult { Status = ExecutionStatus.InProgress };
    }
}

, если я сохраню команду следующим образом:

 Command c = new MoveCommand();
MongoDataBaseInstance.GetCollection<Command>("Commands").Save(c);

, а затем сделаю запрос к БД, я не вижу, чтобы производные свойства сохранялись.

{"_id": "4df43312c4c2ac12a8f987e4" , "_t": "MoveCommand"}

Я бы ожидал, что свойство Name будет ключом в документе. Что я делаю не так?

Есть ли способ избежать наличия атрибута BsonKnowTypes в базовом классе для сохраняющихся производных экземпляров? Я не понимаю, почему базовый класс должен знать о производных классах. Это плохой объектно-ориентированный дизайн и налагается на мою иерархию классов библиотекой BSON. Я что-то упустил?

5
задан Abhijeet Patel 12 June 2011 в 03:57
поделиться