2011-11-08 69 views
1

我正在使用FluentMongo和MongoDBCSharpDriver。我的代碼工作了一段時間,但更新我的MongoCSharpDriver後,我現在不斷收到此錯誤,當我嘗試查詢數據庫:FluentMongo突然拋出錯誤

「鑑別器只能註冊的類,而不是接口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; 
} 

回答

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