1

我正在使用 FluentMongo 和 MongoDBCSharpDriver。我的代码在一段时间内运行良好,但在更新了 MongoCSharpDriver 后,我现在在尝试查询数据库时不断收到此错误:

“鉴别器只能为类注册,不能为接口 MyLib.Services.IRepoData 注册。”

该接口IRepoData只是我用于保存到 MongoDB 的所有对象的接口。它只是为所有东西定义了 _id。这是中断的行:

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

任何人都可以对此有所了解吗?如果我只使用.SingleOrDefault()没有 lambda,那么它可以正常工作,它传递了一个破坏它的 lambda。

编辑

如果这有帮助...

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;
}
4

1 回答 1

1

找到了!我从另一个通用方法中调用 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()));

于 2011-11-08T22:09:50.877 回答