- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
众所周知,EF-Core 中没有延迟加载。因此,这意味着我不得不事后才进行查询。既然要思考,那我就试着好好的去做吧。
我有一个相当标准的更新查询,但我想嘿,我不必总是包含 HeaderImage
和 PromoImage
FK 对象。应该有办法做到这一点。但是我以后找不到执行包含的方法。事实上,我想在我实际处理该对象之前添加它。那样我也许可以自动化一些渴望。
ArticleContent ac = _ctx.ArticleContents
.Include(a=> a.Metadata)
.Include(a=> a.HeaderImage)
.Include(a=> a.PromoImage)
.Single(a => a.Id == model.BaseID);
ac.Title = model.Title;
ac.Ingress = model.Ingress;
ac.Body = model.Body;
ac.Footer = model.Footer;
if (model.HeaderImage != null)
{
ac.HeaderImage.FileURL = await StoreImage(model.HeaderImage, $"Header_{model.Title.Replace(" ", "_")}_{rand.Next()}");
}
if (model.PromoImage != null)
{
ac.PromoImage.FileURL = await StoreImage(model.PromoImage, $"Promo_{model.Title.Replace(" ", "_")}_{rand.Next()}");
}
ac.Metadata.EditedById = uId;
ac.Metadata.LastChangedTimestamp = DateTime.Now;
await _ctx.SaveChangesAsync();
额外
需要明确的是,这是 EF7 (Core),我正在寻找一个允许我按需添加包含的解决方案,希望在初始 _ctx.ArticleContents.Include(a= > a.Metadata).Single(a => a.Id == model.BaseID).
最佳答案
我使用的是类似于 Alexander Derck 的解决方案。 (关于评论中提到的异常:ctx.ArticleContents.AsQueryable() 也应该有效。)
对于几个 CRUD MVC 站点,我使用的是 BaseAdminController
。在派生的具体 Controller 中,我可以动态添加 Includes。来自 BaseAdminController:
// TModel: e.g. ArticleContent
private List<Expression<Func<TModel, object>>> includeIndexExpressionList = new List<Expression<Func<TModel, object>>>();
protected void AddIncludes(Expression<Func<TModel, object>> includeExpression)
{
includeIndexExpressionList.Add(includeExpression);
}
后来我看到我需要更大的灵 active ,所以我添加了一个queryable。例如。对于 ThenInclude()。
private Func<IQueryable<TModel>, IQueryable<TModel>> IndexAdditionalQuery { get; set; }
protected void SetAdditionalQuery(Func<IQueryable<TModel>, IQueryable<TModel>> queryable)
{
IndexAdditionalQuery = queryable;
}
这里是 Index Action :
public virtual async Task<IActionResult> Index()
{
// dynamic include:
// dbset is for instance ctx.ArticleContents
var queryable = includeIndexExpressionList
.Aggregate(dbSet.AsQueryable(), (current, include) => current.Include(include));
if(IndexAdditionalQuery != null) queryable = IndexAdditionalQuery(queryable);
var list = await queryable.Take(100).AsNoTracking().ToListAsync();
var viewModelList = list.Map<IList<TModel>, IList<TViewModel>>();
return View(viewModelList);
}
在我使用的具体 Controller 中:
AddIncludes(e => e.EventCategory);
SetAdditionalQuery(q => q
.Include(e => e.Event2Locations)
.ThenInclude(j => j.Location));
关于c# - 有条件地包含和 ThenInclude,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36697464/
众所周知,EF-Core 中没有延迟加载。因此,这意味着我不得不事后才进行查询。既然要思考,那我就试着好好的去做吧。 我有一个相当标准的更新查询,但我想嘿,我不必总是包含 HeaderImage 和
我一直在尝试使用 Entity Framework,在遇到以下错误后,我尝试使用 ThenInclude 来解决它。 The expression '[x].ModelA.ModelB' passed
这是我的通用存储库: public class Repository : IRepository where T : BaseEntity { private DbContext _dbCon
我将.NET Framework(EF6)代码传输到ASP.NET Core(EF Core),但我偶然发现了这个问题。这是一些示例代码: 在EF6中,我使用Include()和Select()进行预
有没有人看到我做错了什么? ProjectActivityTasks 具有 UnitOfMeasureId 和 ProjectActivityTaskTypeId。按照它的编写方式,它认为 UnitO
我看到一些包含 ThenInclude 的 LINQ 代码示例。我在哪里可以找到这样的方法?在外部库或其他命名空间中。 我想用这样的方法获取派生数据,但是我找不到这样的方法或者你知道其他解决方案吗
这个问题在这里已经有了答案: Filtering on Include in EF Core (9 个回答) 关闭 5 个月前。 我有 3 个实体: Questionnaire.cs: public
我使用以下查询根据需要过滤我的 BranchId。 var query = await _dbContext.TargetItems .Include(i => i.Br
我有一个这样的查询 return await _ctx.Activities .Include(a => a.Attributes) .Include(
我的 IQueryable 看起来像这样: IQueryable query = context.Set(); query = query.Include("Car").ThenInclude("M
英孚核心 3.1 我见过Specification例如,并希望实现 ThenInclude 模式。 public static class QuerySpecificationExtensions {
我正在创建一个 ASP.NET Core API 应用程序,并依赖于 EF Core。我有这样定义的实体: public class AppUser : IdentityUser { publ
我将 Entity Framework Core 与 Repository Pattern 一起使用,但遇到一个问题。 我有类 Customer、Company 和 Email,其中隐藏了与此处无关的
假设首先有这些模型: Method 有一个 OriginalCodeOriginalCode 有很多 MutantMutant 有许多 ParseSubTree 现在,当查询 Method 时,我希望
这个问题在这里已经有了答案: Can not load related data with Include or ThenInclude or Select/Many with ONE query
我需要在 ThenInclude 中使用 where var templatesFields = await _context.Sections .Include(x
假设首先拥有这些模型: Method有一个 OriginalCodeOriginalCode有很多Mutant秒Mutant有很多ParseSubTree秒 现在在 Method 上查询时我想要另一个
以前(使用 .net 4.5.2 和 EF 6 时)。我有一个通用的 Get接受多个包含的方法如下; public abstract class DataContext : IdentityDbCon
好的,所以我有一个表 Building,其中包含该建筑物中的所有人员。然而,每个人都有一个职业,它本身就是一个实体,根据可用的内容添加到 Person 实体。 var data = _dbcontex
我正在使用 EF core 2.0 并想过滤子集合。谁能帮助我如何在 EF 核心 2.0 中执行此操作? var items = await _context.RiskType
我是一名优秀的程序员,十分优秀!