我的所有实体都有这样的存储库:
public abstract class GenericRepository<C, T> :
IGenericRepository<T>
where T : class
where C : DbContext, new()
{
private C _entities = new C();
public C Context
{
get { return _entities; }
set { _entities = value; }
}
public virtual IQueryable<T> GetAll()
{
IQueryable<T> query = _entities.Set<T>();
return query;
}
public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
IQueryable<T> query = _entities.Set<T>().Where(predicate);
return query;
}
public virtual void Add(T entity)
{
_entities.Set<T>().Add(entity);
}
public virtual void Delete(T entity)
{
_entities.Set<T>().Remove(entity);
}
public virtual void Edit(T entity)
{
_entities.Entry(entity).State = System.Data.Entity.EntityState.Modified;
}
public virtual void Save()
{
_entities.SaveChanges();
}
}
所以我创建了一个用户存储库,这可以从上面的类中获得,如下所示:
public class userRepository:GenericRepository<InModelContainer,User>
{
}
我的问题是,如何在班上调用 FindBy()方法,我的用户实体是这样的:
public partial class User
{
public User()
{
this.Ideas = new HashSet<Idea>();
this.Companies = new HashSet<Company>();
}
public int Id { get; set; }
[DisplayName("نام")]
[Required(ErrorMessage = "نام را وارد کنید")]
public string Name { get; set; }
}
我需要找用户按 ID ,所以我必须使用 findBy 方法,但我不知道如何调用这种方法。
示例:
userRepository objRepository= new userRepository();
public ActionResult Edit(int id)
{
return View(objRepository.FindBy());
}
我应该将什么传递给上述功能?
最好的问候。
我正在使用MVC4和EF6。
答案 0 :(得分:0)
你去吧
userRepository objRepository= new userRepository();
public ActionResult Edit(int id)
{
return View(objRepository.FindBy(user => user.Id == id).FirstOrDefault());
}
这将根据id过滤用户,并将取第一个,如果没有匹配则为null。如果你想要一个例外,你也可以选择使用.First()。