我是 mongodb 的新手,我正在为一个新项目开发 mvc4 Web 应用程序。
我想使用将与 mongodb 上下文进行数据库级通信的存储库模式。
下面是我与 Entity Framework 4.0 一起使用的简单界面。查找成员对我来说是有问题的区域。我不知道如何在 mongodb 上下文中处理它们。
public interface IRepository<T> where T : class
{
void Add(T entity);
void Remove(T entity);
IQueryable<T> Find(Expression<Func<T, bool>> predicate);
//IQueryable<T> FindAll();
}
我有一个非常简单的模型,称为 Hero,它来自 ImongoEntity 的驱动器,它提供了一个名为 accessId 的成员。
public class Hero : MongoDB.Kennedy.IMongoEntity
{
public ObjectId _id { get; set; }
public string Name { get; set; }
public string Alias { get; set; }
public string _accessId { get; set;}
}
Context 类非常简单,您可以看到以 IQueryable 属性公开的 Heros 集合。
public class MongoDataConetext: MongoDB.Kennedy.ConcurrentDataContext
{
public MongoDataConetext(string databaseName, string serverName="localhost") : base(databaseName, serverName)
{
}
public IQueryable<Hero> Heros {
get {
return base.GetCollection<Hero>().AsQueryable();
}
}
}
现在在我的存储库中,最简单的方法是添加和删除它们成功地与 mongodb 上下文对话并从 mongodb 中添加或删除实体。但是 Find 方法给了我编译器级别的错误。我需要帮助来查找和查找所有方法。我正在使用泛型,因为我需要我的存储库类来存储英雄、解决方案、项目、用户和类别等实体。
public class Repository<T> : IRepository<T> where T : class, IMongoEntity
{
private readonly MongoDataConetext _ctx;
public Repository(MongoDataConetext ctx)
{
_ctx = ctx;
}
public void Add(T entity)
{
_ctx.Save(entity);
}
public void Remove(T entity)
{
_ctx.Delete(entity);
}
public IQueryable<T> Find(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
_ctx.Heros.Where(predicate);
//throw new NotImplementedException();
}
//public IQueryable<T> FindAll()
//{
// throw new NotImplementedException();
//}
}