[英]EF Many-to-many dbset.Include in DAL on GenericRepository
如果我的生活取决于它,我将无法获取QueryObjectGraph添加INCLUDE子表...我还缺少什么? 停留在第三天的事情应该很简单:-/
DAL:
public abstract class RepositoryBase<T> where T : class
{
private MyLPL2Context dataContext;
private readonly IDbSet<T> dbset;
protected RepositoryBase(IDatabaseFactory databaseFactory)
{
DatabaseFactory = databaseFactory;
dbset = DataContext.Set<T>();
DataContext.Configuration.LazyLoadingEnabled = true;
}
protected IDatabaseFactory DatabaseFactory
{
get;
private set;
}
protected MyLPL2Context DataContext
{
get { return dataContext ?? (dataContext = DatabaseFactory.Get()); }
}
public IQueryable<T> QueryObjectGraph(Expression<Func<T, bool>> filter,
params string[] children)
{
foreach (var child in children)
{
dbset.Include(child);
}
return dbset.Where(filter);
}
... DAL存储库
public interface IBreed_TranslatedSqlRepository : ISqlRepository<Breed_Translated>
{
}
public class Breed_TranslatedSqlRepository : RepositoryBase<Breed_Translated>,
IBreed_TranslatedSqlRepository
{
public Breed_TranslatedSqlRepository(IDatabaseFactory databaseFactory)
: base(databaseFactory)
{}
}
BLL回购:
public IQueryable<Breed_Translated>
QueryObjectGraph(Expression<Func<Breed_Translated, bool>> filter,
params string[] children)
{
return _r.QueryObjectGraph(filter, children);
}
控制器:
var breeds1 = _breedTranslatedRepository
.QueryObjectGraph(b => b.Culture == culture, new string[] { "AnimalType_Breed" })
.ToList();
我无法进入Breed.AnimalType_Breed.AnimalTypeId
..我可以深入到Breed.AnimalType_Breed,然后intelisense期望一个表达式?
提示(如果有的话),DB表:粗体表示多对多Breed,Breed_Translated, AnimalType_Breed ,AnimalType,...
如果您查看“包含”,则它具有返回类型。 Linq主要是功能性的,因此它不会更改任何对象,而是返回新的对象。 您需要存储此新对象。
尝试:
var query = dbset.Where(filter);
foreach (var child in children)
{
query = query.Include(child);
}
return query;
其他说明:您可以简化此操作:
var breeds1 = _breedTranslatedRepository
.QueryObjectGraph(b => b.Culture == culture, new string[] { "AnimalType_Breed" })
.ToList();
至
var breeds1 = _breedTranslatedRepository
.QueryObjectGraph(b => b.Culture == culture, "AnimalType_Breed")
.ToList();
当您的方法采用params string []参数时
AnimalBreed_Type
表示多对多关系,因此Breed_Translated
实体中的AnimalBreed_Type
属性是集合 ! 集合类型没有您的表格属性。 您必须使用First
或Single
从该集合中获取单个相关实体,并检查其AnimalTypeId
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.