如何通过ID实体框架检索对象?

时间:2013-11-25 15:13:54

标签: asp.net-mvc entity-framework repository-pattern autofac

我跟进了本教程here使用Autofac依赖注入器和工作单元实现Repository模式。

现在我正在尝试从数据库中检索艺术家对象。

使用Dbcontext就像使用_db.Artists.Find(id)一样简单 现在因为我实现了Generic Repository也是新的Repository patern。我不确定查询应该是什么

在我的艺术家控制器中

 return View(this._artistDetailsRep.SingleOrDefault(p => p.ArtistID= id));

抱怨说exassion树不能是赋值运算符。

这是通用方法:

 public virtual TEntity SingleOrDefault(
        Expression<Func<TEntity, bool>> where, params Expression<Func<TEntity, object>>[] includeProperties)
    {
        IQueryable<TEntity> query = this.AsQueryable();
        query = PerformInclusions(includeProperties, query);
        return query.SingleOrDefault(where);
    }

我的查询应该如何检索我编写id的对象?

由于

1 个答案:

答案 0 :(得分:3)

您的问题与EF或Autofac或存储库模式无关,但您滥用SingleOrDefault:您需要使用双等于==而不是单个等号=

return View(this._artistDetailsRep.SingleOrDefault(p => p.ArtistID == id));

单个等号=表示赋值(在此上下文中无效),但在您的情况下,您需要进行比较,因此您需要双等于==

在这种情况下,您的SingleOrDefault来电将转换为:“如果艺术家不存在,则给我唯一一位ArtistID等于idnull的艺术家。”