ASP.NET CORE 1.0存储库加载相关数据EF CORE

时间:2016-07-14 23:29:48

标签: entity-framework entity-framework-core

我正在创建一个ASP.NET Core 1.0,我在RC1中创建了相同的应用程序。我在使用EF Core查询相关表数据时遇到问题。

以前我使用的是EF7,无论现场是否有数据,一切都运转正常。我的问题是,当我使用.Include时,它没有返回所有记录的集合。我使用我的nuget控制台使用https://docs.efproject.net/en/latest/querying/related-data.html上的示例创建了我的模型:

  

Scaffold-DbContext" Server =(localdb)\ mssqllocaldb; Database = Blogging; Trusted_Connection = True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

得到了这个模型:

public partial class Complaint
{
    public Complaint()
    {
        Checklist = new HashSet<Checklist>();
        Clnotes = new HashSet<Clnotes>();

    }

    public int CompId { get; set; }
    public string FileNum { get; set; }
    public DateTime? ReceivedDt { get; set; }
    public DateTime? CompletedDt { get; set; }


       public virtual ICollection<Checklist> Checklist { get; set; }
    public virtual ICollection<Clnotes> Clnotes { get; set; }
    }

我的GetAll存储库():

    public IEnumerable<Complaint> GetAll()
    {
        try
        {
            return _context.Complaint
                //.Include(t => t.Checklist)
                //.Include(cl => cl.Clnotes)
                .ToList();
        }
        catch (Exception ex)
        {
            _logger.LogError("Could not get complaint with checklist", ex);
            return null;
        }
    }

问题

为什么当我使用EF7包括相关表时,包括数据库中每条记录的数据。对于EF Core,当我包含清单或clnotes表时,只显示一条记录?当我没有包含相关表格时,所有投诉都会显示出来。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我不知道为什么它会像这样工作,但选择包括解决它后面的字段。尝试这样的事情:

return _context.Complaint
    .Include(t => t.Checklist)
    //.Include(cl => cl.Clnotes)
    .Select(c => new {
        c.CompId, c.FileNum, c.Checklist, // c.Clnotes
    )
    .ToList();

您可能需要将方法类型从IEnumerable更改为其他内容,例如IActionResult。

答案 1 :(得分:0)

您需要添加以下行以避免循环引用

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