У меня следующая иерархия классов
[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. Я что-то упустил?