【问题标题】:How to get dependent entities on ef core?如何在 ef core 上获取依赖实体?
【发布时间】:2017-07-15 23:59:16
【问题描述】:

这是我的模型架构。

这是依赖实体

public class ArticleFee
{
    public int ID { get; set; }
    public string Description { get; set; }
    public Type Type { get; set; }
    public double? FixedFee { get; set; }
    public int? RangeStart { get; set; }
    public int? RangeEnd { get; set; }
    public double? Percentage { get; set; }

    [StringLengthAttribute(1, MinimumLength = 1)]
    public string ArticleLetter { get; set; }
    public Article Article { get; set; }
}
public class Article
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        [KeyAttribute]
        [StringLengthAttribute(1, MinimumLength = 1)]
        public string Letter { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }

        public ICollection<ArticleFee> ArticleFees { get; set; }
    }

这是我在路线上显示数据的方式,但 ArticleFees 只显示一个空数组。

[HttpGetAttribute]
    public IEnumerable<Article> Get()
    {
        return _context.Articles
            .Include(a => a.ArticleFees)
            .ToList();
    }

【问题讨论】:

  • 你的问题是?
  • 我如何获取相关或依赖实体并在我的路线上显示它们?
  • 反射(元数据)?
  • 当您首先在局部变量中捕获查询结果并查看调试器时,Include 是否有效?这是哪个 ef-code 版本?

标签: asp.net asp.net-core entity-framework-core


【解决方案1】:

您的模型很好(*),Get() 方法也很好。您的问题是在 JSON 序列化期间检测到无限循环,因为 Article 指向 ArticleFeeArticleFee 指向 Article

要解决您的问题,您必须在Startup.cs 中配置应用程序,以便在检测到此类循环时“忽略”而不是“抛出异常”。 .NET Core 中的解决方案来自this SO 答案:

services.AddMvc().AddJsonOptions(options => {
     options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
}); ;

您需要将using Newtonsoft.Json; 添加到文件中。

(*) 假设你的 Type 实体没问题。

【讨论】:

  • 这可能会成为一个问题,但如果是这样,它会抛出异常并且不会静默地序列化一个空数组。此外,当引用循环被忽略时,数组应该被序列化,而不是其元素内的反向引用。
猜你喜欢
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 2018-04-05
  • 2021-05-14
相关资源
最近更新 更多