我不想要的EF Core加载关系

r3plica

我有一项使用EagerLoading撤回实体的服务在大多数情况下,这是可行的,但是我最近发现了一个问题。我有一个领域:

public class Field
{
    [Required] public int Id { get; set; }
    [Required, MaxLength(100)] public string CategoryId { get; set; }
    [Required, MaxLength(100)] public string Name { get; set; }
    public FieldDataType DataType { get; set; }
    public bool IsSpecification { get; set; }

    public IList<FieldMap> FieldMaps { get; set; }
}

如您所见,它具有与之关联FieldMap的集合FieldMap看起来是这样的:

public class FieldMap
{
    public int Id { get; set; }
    public int FeedId { get; set; }
    public int FieldId { get; set; }
    [Required, MaxLength(100)] public string Path { get; set; }

    public Field Field { get; set; }
}

这样映射到我的DbContext中:

modelBuilder.Entity<Field>().HasMany(m => m.FieldMaps).WithOne().HasForeignKey(m => m.FieldId);

// Unique constraints
modelBuilder.Entity<Field>().HasIndex(m => new { m.CategoryId, m.Name, m.IsSpecification }).IsUnique();
modelBuilder.Entity<FieldMap>().HasIndex(m => new { m.FeedId, m.Path }).IsUnique();

// Disable cascade delete
modelBuilder.Entity<FieldMap>().HasOne(m => m.Field).WithMany(m => m.FieldMaps).OnDelete(DeleteBehavior.Restrict);

问题是,当我调用List方法时,它将永远拉回所有项目:

在此处输入图片说明

我的列表方法是这样的:

public IQueryable<T> List(params string[] includes)
{
    IQueryable<T> query = _dbEntitySet;

    return includes == null ? 
        query : 
        includes.Aggregate(query, (current, include) => current.Include(include));
}

我这样调用它:

[HttpGet("{id:int}/fields")]
[ProducesResponseType(typeof(List<Field>), StatusCodes.Status200OK)]
public IActionResult ListFieldMaps(int id)
{
    var feeds = _feedService.List();
    var feed = feeds.SingleOrDefault(m => m.Id.Equals(id));
    if (feed == null) return NotFound();

    var fieldMaps = _fieldMapService.List("Field");

    if (fieldMaps.Any(m => m.Field == null)) return BadRequest(Resources.NullFieldError);

    return Ok(fieldMaps.Where(m =>
        m.FeedId.Equals(id) &&
        m.Field.IsSpecification == (feed.Type == FeedType.Specification)).ToList());
}

如您所见,它只应加载具有一个FieldFieldMap列表,而后加载其余的Fieldmap。

有人可以帮我解决这个问题吗?

r3plica

我找到了这篇文章:

https://docs.microsoft.com/zh-cn/ef/core/querying/related-data#lazy-loading

和这个问题:

https://github.com/aspnet/EntityFrameworkCore/issues/11564

并且他们两个都可以添加以下内容:

services.AddMvc()
    .AddJsonOptions(options =>
        options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

这使我的问题得以解决。现在,当我发出请求时,得到以下响应:

[
    {
        "Id": 1,
        "FeedId": 1,
        "FieldId": 10,
        "Path": "aw_product_id",
        "Field": {
            "Id": 10,
            "CategoryId": "cameras",
            "Name": "gtin",
            "DataType": 0,
            "IsSpecification": false,
            "FieldMaps": []
        }
    }
]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不必要地在EF Core中加载关系

来自分类Dev

从另一个页面加载时,我想清除页面的Cookie,但从同一页面重新加载时,我不想要

来自分类Dev

删除我不想要的文字

来自分类Dev

Laravel多对多关系,不想要的限制为250

来自分类Dev

为什么我的关系不想工作?

来自分类Dev

对EF Core 2.1关系的怀疑

来自分类Dev

Apache CXF我不想要基元

来自分类Dev

Django缓存查询(我不想要)

来自分类Dev

Artifactory正在缓存我不想要的工件

来自分类Dev

Git忽略了我不想要的文件

来自分类Dev

我不想要固定的导航栏

来自分类Dev

为什么我的javafx阶段不想加载

来自分类Dev

如何加载EF类及其关系类

来自分类Dev

EF Core 3.0 1:0与流利的关系

来自分类Dev

EF Core 3 1对0关系问题

来自分类Dev

EF Core 5,删除多对多关系

来自分类Dev

EF Core 关系 - 冗余列 id

来自分类Dev

NSUserDefaults不加载我想要的数字

来自分类Dev

R:Rvest-隐藏了我不想要的文字

来自分类Dev

数组内容显示为 [object HTMLInputElement],这是我不想要的

来自分类Dev

为什么 Jquery 在我不想要的时候呈现为 HTMLString?

来自分类Dev

我不想要孙实体上的父实体或外键

来自分类Dev

& 总是使用 HtmlOutput 或 HtmlTemplate 解码(我不想要)

来自分类Dev

我将如何在EF Core中创建这种多对多关系?

来自分类Dev

我想要透明的UIView,但不想要在其上添加的元素

来自分类Dev

使用EF Core 3.1加载相关数据

来自分类Dev

EF Core:分离的延迟加载导航属性

来自分类Dev

EF Core Eager加载返回null

来自分类Dev

EF Core中按ID和类型的关系