【发布时间】:2011-06-12 03:57:06
【问题描述】:
我有以下类层次结构
[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 属性来持久化派生实例?我不明白为什么基类需要了解派生类。这是糟糕的 OO 设计,并且被 BSON 库强加在我的类层次结构中。我在这里遗漏了什么吗?
【问题讨论】:
标签: mongodb mongodb-.net-driver