首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通用存储库,功能说明/ c#

通用存储库,功能说明/ c#
EN

Stack Overflow用户
提问于 2013-04-23 15:34:58
回答 1查看 1.2K关注 0票数 0

我发现了一些有趣的通用存储库,但我不知道该函数是做什么的: PerformInclusions(includeProperties,query);

调用PerformInclusions,

代码语言:javascript
复制
public T Single(Expression<Func<T, bool>> where, string includeProperties)
        {
            try
            {
                IQueryable<T> query = IDbSet;
                query = PerformInclusions(includeProperties, query);
                return query.Single(where);
            }
            catch (InvalidOperationException ex)
            {
                return null;
            }
        }

PerformInclusions

代码语言:javascript
复制
private static IQueryable<T> PerformInclusions(string includeProperties,
                                                       IQueryable<T> query)
        {
            if (includeProperties != null && includeProperties.Length > 0)
            {
                foreach (var includeProperty in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    query = query.Include(includeProperty);
                }
            }
            return query;
        }

我可以使用没有第二个参数的单个函数。

代码语言:javascript
复制
Euser test = Adapter.EuserRepository.Single(u => u.EuserEmail.Equals(user.EuserEmail), "");

所以我有两个问题,PerformInclusions()函数是做什么的,谁能给我举个例子,在调用single()函数时,包含属性是什么。

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-23 15:41:37

正如@Andrei所说的,这让你可以使用熟悉的EF include语法来快速加载导航属性。nav属性紧急加载的另一种替代方法是通过lambdas,如下所示:

代码语言:javascript
复制
    public T GetBy(Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] includes)
    {
        var result = GetAll();
        if (includes.Any())
        {
            foreach (var include in includes)
            {
                result = result.Include(include);
            }
        }
        return result.FirstOrDefault(predicate);
    }

如果您有一个具有如下导航属性的实体:

代码语言:javascript
复制
public class Test{
    public int Id {get;set;}
    public SomethingElse Thing {get;set;}
}

_repo.Single(t => t.Id == 1, "");_repo.GetBy(t => t.Id == 1);

将返回Thing为空的实体

_repo.Single(t => t.Id == 1, "Thing");_repo.GetBy(t => t.Id == 1, t=>t.Thing);

将返回一个具有通过外键填充的内容的实体

有关EF中导航属性的更多详细信息,请查看我的博客http://blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16163565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档