FluentMongo внезапно выкидывает ошибку - PullRequest
1 голос
/ 08 ноября 2011

Я использую FluentMongo и MongoDBCSharpDriver.Некоторое время мой код работал нормально, но после обновления моего MongoCSharpDriver я теперь получаю эту ошибку, когда пытаюсь выполнить запрос к базе данных:

"Дискриминаторы могут быть зарегистрированы только для классов, но не для интерфейса MyLib.Services.IRepoData. "

Интерфейс IRepoData - это всего лишь один интерфейс, который я использую для всех своих объектов, сохраненных в MongoDB.Он просто определяет _id для всего.Вот линия, которая ломается:

var item = Collection.AsQueryable().SingleOrDefault(a => a.Id == itemID);

Может кто-нибудь пролить свет на этот?Если я просто использую .SingleOrDefault() без лямбды, то она работает нормально, передавая лямбду, которая ее ломает.

EDIT

В случае, если это помогает ...

var Collection = GetCollection<MyClass>();

private MongoCollection<T> GetCollection<T>() where T : class, new()
{
    string typeName = typeof(T).Name;
    var collection = db.GetCollection<T>(typeName, safeMode);
    return collection;
}

1 Ответ

1 голос
/ 09 ноября 2011

Нашли это!Я вызывал GetCollection () из другого универсального метода, например так:

public T Save<T>(T item) where T : class, IRepoData, new()
{
    GetCollection<T>().Save(item);
}

Это заставило GetCollection видеть T как интерфейс вместо фактического класса экземпляра.GetCollection отлично работает в любом другом месте.

Для всех, кто столкнулся с этой проблемой, я просто использовал вместо этого запрос низкого уровня, подобный этому ... Collection.FindOneAs<T>(Query.EQ("Id", itemID.ToString()));

...