Из моего Web API
службы с использованием шаблона generic-repository/uow с EF6
, мне нужно вернуть вложенные свойства навигации. Модель A имеет модель B, а модель B - модель C и т. Д. Что-то вроде этого:Может включать в себя свойства навигации для вложения в веб-API с помощью EF6?
public class A
{
public int SomeID { get; set; }
public ICollection<B> Bs { get; set; }
}
public class B
{
public int SomeID { get; set; }
public ICollection<C> Cs { get; set; }
}
Я могу получить Bs в A, но Cs in B - null. Вот как я это делаю:
// GENERIC REPOSITORY
public IQueryable<TEntity> Get(params Expression<Func<TEntity, object>>[] includes)
{
IQueryable<TEntity> query = _dbSet;
if (includes != null)
{
foreach (var include in includes)
query = query.Include(include);
}
return query;
}
// FROM THE "A" CONTROLLER
public HttpResponseMessage Get()
{
HttpResponseMessage response;
var results = _unitOfWork.A_Repository.Get(s => s.Bs);
if (results == null)
{
response = new HttpResponseMessage(HttpStatusCode.NotFound);
}
else
{
response = Request.CreateResponse(HttpStatusCode.OK, results);
}
return response;
}
Я не понимаю, как я могу передать дополнительные лямбды от A контроллера, чтобы получить Cs в B загружен. Я вижу, как это сделать, не используя общий репозиторий. Я открыт для использования OData тоже, но не могу понять, как сделать это с помощью этого шаблона в Web API
Я также попытался использовать подход DbContext и не удалось:
public class MyContext : DbContext
{
public DbSet<A> As { get; set; }
public DbSet<B> Bs { get; set; }
public DbSet<C> Cs { get; set; }
public MyContext()
: base("MyDBContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<B>().HasRequired(i => i.C);
Bs.Include(i => i.C);
}
}
Это работает. В моем примере он должен быть закодирован из единицы работы (_unitOfWork), а не контекста. Благодарю. –