Я обновляю старый проект, в котором слой базы данных реализован в виде интерфейсов, поэтому проще добавить новую опцию базы данных. В настоящее время я пытаюсь добавить к нему реализацию MongoDB, и у меня возникли некоторые проблемы.
Проект имеет интерфейс под названием IDataQuery
, который происходит от интерфейса LINQ.IQueryable
:
public interface IDataQuery<out T> : IQueryable<T>
{
}
Он также имеет интерфакс c, называемый 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>
, но это не сработало.