我发现了一些有趣的通用存储库,但我不知道该函数是做什么的: PerformInclusions(includeProperties,query);
调用PerformInclusions,
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
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;
}我可以使用没有第二个参数的单个函数。
Euser test = Adapter.EuserRepository.Single(u => u.EuserEmail.Equals(user.EuserEmail), "");所以我有两个问题,PerformInclusions()函数是做什么的,谁能给我举个例子,在调用single()函数时,包含属性是什么。
提前感谢
发布于 2013-04-23 15:41:37
正如@Andrei所说的,这让你可以使用熟悉的EF include语法来快速加载导航属性。nav属性紧急加载的另一种替代方法是通过lambdas,如下所示:
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);
}如果您有一个具有如下导航属性的实体:
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
https://stackoverflow.com/questions/16163565
复制相似问题