Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 EntityFramework中的FindBy Id方法_Asp.net Mvc 3_Entity Framework_Repository Pattern - Fatal编程技术网

Asp.net mvc 3 EntityFramework中的FindBy Id方法

Asp.net mvc 3 EntityFramework中的FindBy Id方法,asp.net-mvc-3,entity-framework,repository-pattern,Asp.net Mvc 3,Entity Framework,Repository Pattern,当我们有这个GenericRepository类时,可以在实体框架中实现FindBy方法: public class Repository<T> : IRepository<T> where T : class, IAggregateRoot { private readonly DbSet<T> _entitySet; public IQueryable<T> FindBy(Expression<Func<T

当我们有这个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.
        }
}
公共类存储库:i存储库,其中T:class,IAggregateRoot
{
私有只读数据库集_entitySet;
公共IQueryable FindBy(表达式谓词)
{
//IQueryable查询=\u entitySet。
}
}
在这种情况下,如何实现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)
        {
            return _entitySet.Where(predicate).
        }
}
公共类存储库:i存储库,其中T:class,IAggregateRoot
{
私有只读数据库集_entitySet;
公共IQueryable FindBy(表达式谓词)
{
返回_entitySet.Where(谓词)。
}
}

我的存储库使用以下方法通过给定表达式返回单个实体

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

如果您的接口IAggregateRoot定义了一个属性Id,那么您还可以向通用接口添加一个显式方法,以通过其Id获取单个实体

public interface IAggregateRoot {
  int Id {get;}
}

public class GenericRepository {
  public T FindSingleById(int id) {
    return _entitySet.FirstOrDefault(entity=>entity.Id == id);
  }
}

通过添加一行代码来暗示!返回_entitySet.Where(谓词);是的,但是还有一个问题,如果想要返回T而不是IQueryable,我必须做什么???@EricNielsen,你想要返回一个实例吗?然后在
之后使用
FirstOrDefault()
SingleOrDefault()
,其中
是一个FindById方法,我想按Id返回一条记录,很明显,返回的是T(ViewModel)而不是IQueryable!
var entity = _repository.FindSingle(entity=> entity.Name == "Hello World");
public interface IAggregateRoot {
  int Id {get;}
}

public class GenericRepository {
  public T FindSingleById(int id) {
    return _entitySet.FirstOrDefault(entity=>entity.Id == id);
  }
}