相关疑难解决方法(0)

可以在Entity Framework Core中创建基于String的Include替代方案吗?

在API上我需要动态包含但是EF Core不支持基于String的包含.

因此我创建了一个映射器,它将字符串映射到添加到列表中的lambda表达式:

List<List<Expression>> expressions = new List<List<Expression>>();
Run Code Online (Sandbox Code Playgroud)

请考虑以下特定类型:

public class EFContext {
  public DbSet<P1> P1s { get; set; }
  public DbSet<P1> P2s { get; set; }
  public DbSet<P1> P3s { get; set; }
}

public class P1 {
  public P2 P2 { get; set; }
  public P3 P3 { get; set; }
}

public class P2 {
  public P3 P3 { get; set; }
}

public class P3 { }
Run Code Online (Sandbox Code Playgroud)

Include和ThenInclude通常使用如下:

  EFContext efcontext = new EFContext();
  IQueryable<P1> result = …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core

17
推荐指数
1
解决办法
2230
查看次数

如何使用DBContext Find方法指定预先加载

如何告诉DBContext的Find方法它应该急切地加载导航属性/实体?

我有以下代码删除与相关辅助实体的关联:

Person primary = db.People.Find(Id);
if (primary == null)
  return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

// This line is required to load the related entity
db.Entry(primary).Reference("Secondary").Load();

primary.Secondary = null;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我不得不添加这条线db.Entry(primary).Reference("Secondary").Load();以使其正常工作.我理解这是因为实体框架正在使用延迟加载.我可以在Find方法中覆盖它,并通过使用Find方法的Eager版本摆脱额外的行吗?

c# asp.net-mvc entity-framework

5
推荐指数
1
解决办法
2336
查看次数

使用预加载的存储库通用方法 GetById

我正在使用实体框架,并希望在 Repository 类中创建通用的GetById方法并预先加载:

这是我使用延迟加载的方法:

public virtual TEntity GetById(object id)
  {
    return DbSet.Find(id);
  }
Run Code Online (Sandbox Code Playgroud)

我知道Find方法不支持急切加载,但是如何修改此方法以使用急切加载,因此我按如下方式使用此方法(例如):

_unitOfWork.MyRepository.GetById(includeProperties: "Users");
Run Code Online (Sandbox Code Playgroud)

c# entity-framework repository repository-pattern

2
推荐指数
1
解决办法
2622
查看次数