我正在更新一个旧项目,该项目将数据库层实现为接口,因此添加新的数据库选项更加容易。我目前正在尝试向其添加MongoDB实现,但遇到了一些麻烦。
该项目有一个名为IDataQuery
的接口,该接口派生自LINQ.IQueryable
接口:
public interface IDataQuery<out T> : IQueryable<T>
{
}
它也有一个称为IDataSession
的接口,它具有返回此类型Query
的IDataQuery
方法:
public interface IDataSession : IDisposable
{
IDataQuery<T> Query<T>() where T : class, IDataEntity;
}
我创建了一个名为MongoDataSession
的类,该类派生自该接口并实现Query
方法,如下所示:
public class MongoDataSession : IDataSession
{
private IMongoDatabase m_database;
public MongoDataSession(IMongoDatabase database)
{
m_database = database;
}
public IDataQuery<T> Query<T>() where T : class, IDataEntity
{
var collection = m_database.GetCollection<T>("test");
return collection.AsQueryable<T>();
}
public void Dispose()
{
// TODO.
}
}
但是,MongoDB AsQueryable
方法将结果返回为IMongoQueryable
。我试图将其强制转换为IDataQuery<T>
,但这没有用。
已解决。我围绕IDataQuery
创建了一个包装器,并将其强制转换为该包装器。