1

この GenericRepository クラスがある間に、エンティティ フレームワークに FindBy メソッドを実装することが可能です。

public class Repository<T> : IRepository<T> where T : class, IAggregateRoot
    {

        private readonly DbSet<T> _entitySet;
public IQueryable<T> FindBy(Expression<Func<T, bool>> predicate)
        {
            //IQueryable<T> query=_entitySet.
        }
}

この場合、FindBy をどのように実装できますか!??

4

2 に答える 2

1

私のリポジトリには、特定の式で単一のエンティティを返す次のメソッドがあります。

public T FindSingle(Expression<Func<T, bool>> predicate) {
  return _entitySet.FirstOrDefault(predicate);
}

これで、呼び出し元は任意の式を使用して、次のように単一のエンティティを取得できます

var entity = _repository.FindSingle(entity=> entity.Id == 23);

また

var entity = _repository.FindSingle(entity=> entity.Name == "Hello World");

インターフェイス IAggregateRoot がプロパティ Id を定義している場合、ジェネリック インターフェイスに明示的なメソッドを追加して、その Id で単一のエンティティを取得することもできます。

public interface IAggregateRoot {
  int Id {get;}
}

public class GenericRepository {
  public T FindSingleById(int id) {
    return _entitySet.FirstOrDefault(entity=>entity.Id == id);
  }
}
于 2013-02-14T11:59:09.933 に答える
1

これはうまくいくはずです

public class Repository<T> : IRepository<T> where T : class, IAggregateRoot
    {

        private readonly DbSet<T> _entitySet;
        public IQueryable<T> FindBy(Expression<Func<T, bool>> predicate)
        {
            return _entitySet.Where(predicate).
        }
}
于 2013-02-14T10:54:51.000 に答える