1

FluentMongo と MongoDBCSharpDriver を使用しています。私のコードはしばらくの間正常に動作していましたが、MongoCSharpDriver を更新した後、データベースにクエリを実行しようとすると、このエラーが発生し続けます。

「識別子はクラスに対してのみ登録できます。インターフェース MyLib.Services.IRepoData に対しては登録できません。」

インターフェイスIRepoDataは、MongoDB に保存されたすべてのオブジェクトに使用するものです。すべての _id を定義するだけです。壊れている行は次のとおりです。

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

誰でもこれに光を当てることができますか?ラムダを使用せずに使用する.SingleOrDefault()と、問題なく動作し、ラムダを渡してそれを壊します。

編集

これが役立つ場合...

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 に答える