不支持MongoDB序列化()

时间:2015-08-26 02:47:06

标签: c# .net mongodb

不确定我在做什么,也找不到任何其他有关此错误甚至是相关内容的参考资料。

当我使用MondoDB和C#.NET尝试下面的代码时,我收到错误消息Serialization().Reference is not supported

我首先在我的代码中尝试过这个:

var maxReference = await Events.Find(p => true)
                               .SortByDescending(p => p.Reference)
                               .Project(p => p.Reference)
                               .FirstOrDefault();

FirstOrDefault方法失败时,我逐渐删除方法,直到我不得不这样做:

var list = await Events.Find(p => true).ToListAsync();
var maxReference = list.Select(p => p.Reference)
                       .OrderByDescending(p => p)
                       .FirstOrDefault();

如果这是一个真正的限制,我愿意使用它,但当我尝试使用ReplaceOneAsync方法时,我再次遇到它。

var form = new Event { Reference = maxReference + 1 };
var options = new UpdateOptions { IsUpsert = true };

await Events.ReplaceOneAsync(p => p.Reference == maxReference, form, options);

我的POCO定义为:

[BsonIgnoreExtraElements]
public class Event : IEvent
{
    public Event() {}

    public Event(int reference)
    {
        Reference = reference;
    }

    [BsonId]
    public ObjectId EventID { get; set; }

    [BsonRequired]
    [BsonIgnoreIfDefault]
    public int Reference { get; set; }
}

1 个答案:

答案 0 :(得分:0)

所以事实证明,在我的情况下,在依赖注入中我使用了接口而且不支持。我想这与Mongo Documents的实例化有关?下面是最终的bootstrapper类。所以它似乎最终不像南希问题那样是Mongo问题。

我改变了这条线 var collection = database.GetCollection<ICollection>("collection");var collection = database.GetCollection<Collection>("collection");

注意Collection类的ICollection接口。一切都在那之后发挥作用。

在:

public class Bootstrapper : DefaultNancyBootstrapper
{
    protected override void ConfigureApplicationContainer(TinyIoCContainer container)
    {
        var connectionString = ;
        var databaseName = ;

        var client = new MongoClient("MongoDatabaseURL");
        container.Register(client);

        var database = client.GetDatabase("MongoDatabaseName");
        container.Register(database);

        var collection = database.GetCollection<ICollection>("collection");
        container.Register(collection);
    }
}

后:

public class Bootstrapper : DefaultNancyBootstrapper {
    protected override void ConfigureApplicationContainer(TinyIoCContainer container)
    {
        var connectionString = ;
        var databaseName = ;

        var client = new MongoClient("MongoDatabaseURL");
        container.Register(client);

        var database = client.GetDatabase("MongoDatabaseName");
        container.Register(database);

        var collection = database.GetCollection<Collection>("collection");
        container.Register(collection);
    }
}