2011-11-08 20 views
1

FluentMongoとMongoDBCSharpDriverを使用しています。私のコードはしばらくの間うまくいきましたが、私のMongoCSharpDriverを更新した後、データベースにクエリを実行しようとするとこのエラーが発生しています:FluentMongoが突然エラーを投げる

"Discriminatorsは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

それを見つけました!

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

これはGetCollectionはなく実際のインスタンスのクラスのインタフェースとしてTを参照させる:私はこのような他の一般的な方法の中からGetCollection()をコールしました。 GetCollectionは他の場所でうまく動作します。

この問題を抱えている人は、このような低レベルのクエリを使用しました... Collection.FindOneAs<T>(Query.EQ("Id", itemID.ToString()));

関連する問題