asp.net core 2.1,Include() 函数不适用于 db first 方法

Posted

技术标签:

【中文标题】asp.net core 2.1,Include() 函数不适用于 db first 方法【英文标题】:asp.net core 2.1, Include() fonction doesn't work with db first approch 【发布时间】:2020-03-23 10:45:00 【问题描述】:

我创建了新项目 asp.net 2.1 api 用于测试 DB first 方法,我有用于测试“DBTest”的数据库,它包含“Patients”表、“Medications”和“Ailments”表,它们使用外键引用“Patients”表,

为了创建模型,我使用了这个命令: PM> Scaffold-DbContext "Server=.\SQLEXPRESS;Database=DBtest;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models2 -Context "DataContext2"

模型和DBcontext生成成功,

public partial class Patients
    
        public Patients()
        
            Ailments = new HashSet<Ailments>();
            Medications = new HashSet<Medications>();
        

        public int PatientId  get; set; 
        public string Name  get; set; 

        public ICollection<Ailments> Ailments  get; set; 
        public ICollection<Medications> Medications  get; set; 
    

我为 Patients 创建了一个控制器 api,GET 方法给出了正确的响应(我用 Postman 测试),但是当我使用 Include() 函数时,例如:

// GET: api/Patients2
        [HttpGet]
        public IEnumerable<Patients> GetPatients()
        
            return _context.Patients.Include(a => a.Ailments).ToList();
         

我没有回应,

我在浏览器的控制台中发现了这个错误

在代码优先方法中一切正常,但在数据库优先方法中我尝试了很多次(将药水添加到脚手架命令.....)但没有任何帮助,

有人遇到过这个问题吗?

【问题讨论】:

【参考方案1】:

试试这个:

services.AddMvc()
  .AddJsonOptions(x => 
     x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore)
  .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

【讨论】:

以上是关于asp.net core 2.1,Include() 函数不适用于 db first 方法的主要内容,如果未能解决你的问题,请参考以下文章

详解Asp.Net Core 2.1+的视图缓存(响应缓存)

目录ASP.NET Core 2.1 入门教程

ASP.NET Core 2.1 显示用户和角色

Asp.net core 2.1 - 如何服务多个角度应用程序?

小5聊Asp.Net Core 2.1 主要依赖那些dll和版本

ReactJS/ASP.Net Core 2.1 版本 CORS 错误