2015-08-26 3 views
3

Не уверен, что я делаю, и не могу найти никаких других ссылок о том, к чему эта ошибка относится или даже связана.MongoDB Serialization() не поддерживается

Я получаю сообщение об ошибке Serialization().Reference is not supported, когда я пытаюсь выполнить код ниже с помощью MondoDB и C# .NET.

я впервые попробовал это в моем коде:

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); 

Мой ПОКО определяется как:

[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; } 
} 
+0

вы пробовали удаления BsonRequired? –

+0

Я застрял на той же проблеме. вы нашли какое-нибудь решение? –

+0

Наконец-то я нашел ответ. Я отправил ответ. Не уверен, что это то, что вы испытали, но моя проблема связана с Нэнси и зависимостью от инъекций. Я обнаружил, что не мог использовать интерфейсы так, как я думал или имел с другими системами DI. –

ответ

0

Так оказалось, что в моем случае, в зависимости инъекций я использовал интерфейсы и что не поддерживается. Думаю, это связано с созданием Монгольских документов? Ниже приведен финальный класс начальной загрузки. Таким образом, похоже, это не проблема Монго, а проблема Нэнси.

изменить линию var collection = database.GetCollection<ICollection>("collection"); к var collection = database.GetCollection<Collection>("collection");.

Обратите внимание на интерфейс ICollection для класса 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<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); 
    } 
} 
Смежные вопросы