gpt4 book ai didi

c# - 导航属性的包含可以使用 EF6 嵌套在 Web API 中吗?

转载 作者:行者123 更新时间:2023-12-02 21:34:05 26 4
gpt4 key购买 nike

从使用带有 EF6 的 generic-repository/uow 模式的 Web API 服务中,我需要返回嵌套导航属性。模型 A 有模型 B,模型 B 有模型 C,依此类推。像这样的事情:

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; }
}

我可以得到 A 中的 B,但 B 中的 C 为空。我就是这样做的:

// 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 Controller 传递额外的 lambda 来加载 B 中的 C。我可以看到如何在不使用通用存储库的情况下执行此操作。我也愿意使用 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);
}
}

最佳答案

您可以使用单个 Include 调用来完成此操作。

_context.A_Repository // where to get from
.Include(a => a.Bs.Select(b => b.Cs.Ds.Es)) // what to include
.Where(a => a.IsCool == true) // how to filter
.ToList(); // materialize result

See remarks of EntityFramework documentation .

关于c# - 导航属性的包含可以使用 EF6 嵌套在 Web API 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21779717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com