带有 NoRM 驱动程序的 MongoDb 中的多态性问题

Posted

技术标签:

【中文标题】带有 NoRM 驱动程序的 MongoDb 中的多态性问题【英文标题】:Polymorphism problem in MongoDb with NoRM driver 【发布时间】:2011-06-14 11:58:40 【问题描述】:

我有课

[MongoDiscriminated]
public abstract class Content

    public int? Id  get; set; 
    public int? ParentId  get; set; 
    public string Slug  get; set; 
    public string Path  get; set; 
    public string Title  get; set; 


public class Area : Content


这样的查询有效

var item = mongo.GetCollection<Area>().AsQueryable().FirstOrDefault();

但是当我进行类似的查询时

var item = mongo.GetCollection<Content>().AsQueryable().FirstOrDefault();

我得到一个 InvalidCastException

Object must implement IConvertible.

怎么了?将 Area 转换为 Content 应该不是问题。我真的必须制作 Content 来实现 IConvertible 吗?

【问题讨论】:

【参考方案1】:

你可以在查询之后进行转换:

mongo.GetCollection<Area>().AsQueryable().Cast<Content>().FirstOrDefault()

【讨论】:

【参考方案2】:

刚刚在 github 上提交了一个 pull request 来修复这个异常:

https://github.com/atheken/NoRM/pulls

【讨论】:

以上是关于带有 NoRM 驱动程序的 MongoDb 中的多态性问题的主要内容,如果未能解决你的问题,请参考以下文章

了解 MongoDB 中的多对多关系以及如何取消引用集合

如何从 nodejs 中的多步表单发布数据并表达到 MongoDB?

.net 中的 mongodb orm/odm?

加速mongodb中的多条件查询

如何处理MongoDB中的多对多关系?

MongoDB中的多对多