【问题标题】:.Net Entity Framework & POCO ... querying full table problem.Net Entity Framework & POCO ...查询全表问题
【发布时间】:2010-05-25 21:08:44
【问题描述】:

我正在尝试使用从我的 edmx 自动生成的 poco 对象来实现存储库模式。

在我的存储库类中,我有:

IObjectSet<E> _objectSet;
private IObjectSet<E> objectSet
{
    get
    {
        if (_objectSet == null)
        {
            _objectSet = this._context.CreateObjectSet<E>();
        }
        return _objectSet;
    }
}

public IQueryable<E> GetQuery(Func<E, bool> where)
{
    return objectSet.Where(where).AsQueryable<E>();
}

public IList<E> SelectAll(Func<E, bool> where)
{
    return GetQuery(where).ToList();
}

其中 E 是我的 POCO 课程之一。当我跟踪数据库并运行它时:

IList<Contact> c = contactRepository.SelectAll(r => r.emailAddress == "myemail@email.com");

它在 sql 跟踪中显示为我的联系人表中所有内容的选择。我在哪里错了? 有一个更好的方法吗?对象集是否不延迟加载......所以它省略了 where 子句? 这是我读到的文章,它说要使用 objectSet ......因为使用 POCO,我没有 EntityObject 传递给“E”

http://devtalk.dk/CommentView,guid,b5d9cad2-e155-423b-b66f-7ec287c5cb06.aspx

【问题讨论】:

    标签: .net entity-framework linq-to-entities poco


    【解决方案1】:

    使用Expression&lt;Func&lt;E, bool&gt;&gt; 代替Func&lt;E, bool&gt;。第一个告诉 C# 编译器发出一个表达式树(用于构建 SQL 查询)而不是实际代码,其中第二个是普通委托。这意味着您当前正在数据库调用之后使用 Linq to Objects 进行过滤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多