ASP.NET CORE 1.0存儲庫加載相關數據EF CORE

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模型

得到這個模型:

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表時,只顯示一條記錄?當我不包括相關表格時,所有投訴都會顯示出來。

一般承認的答案

我有同樣的問題。我不知道為什麼它會像這樣工作,但選擇包括解決它後的字段。嘗試這樣的事情:

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。


熱門答案

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

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


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因