使用Generic类型将值传递给FindById方法不起作用

时间:2014-05-27 04:48:54

标签: c# entity-framework asp.net-mvc-4

我的所有实体都有这样的存储库:

 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。

1 个答案:

答案 0 :(得分:0)

你去吧

   userRepository objRepository= new userRepository();
   public ActionResult Edit(int id)
    {
       return View(objRepository.FindBy(user => user.Id == id).FirstOrDefault());
    }

这将根据id过滤用户,并将取第一个,如果没有匹配则为null。如果你想要一个例外,你也可以选择使用.First()。

相关问题