繁体   English   中英

EF多对多dbset.GenericRepository上的DAL中包含

[英]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属性是集合 集合类型没有您的表格属性。 您必须使用FirstSingle从该集合中获取单个相关实体,并检查其AnimalTypeId

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM