私は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();
}
私は、accessId と呼ばれるメンバーを提供する ImongoEntity からの Hero と呼ばれる非常に単純なモデルを持っています。
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 プロパティとして公開されたヒーローのコレクションを見ることができます。
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 および find all メソッドのヘルプが必要です。ヒーロー、ソリューション、プロジェクト、ユーザー、カテゴリなどのエンティティのリポジトリ クラスが必要なため、ジェネリックを使用しています。
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();
//}
}