ASP.NET CORE 1.0リポジトリ関連データのロードEF CORE

entity-framework entity-framework-core

質問

私はASP.NET Core 1.0の作成に取り組んでおり、RC1で同じアプリケーションを作成しました。私は、EFコアで関連するテーブルデータを照会することに問題があります。

以前はEF7を使用していましたが、フィールドにデータがあるかどうかにかかわらず、すべて正常に機能しました。私の問題は、使用するとすべてのレコードのコレクションを返さないということです。インクルード。私は、 https ://docs.efproject.net/en/latest/querying/related-data.htmlのサンプルを使って自分のモデルをナゲットコンソールで作成しました:

Scaffold-DbContext "Server =(localdb)\ mssqllocaldb;データベース= 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コアの場合、チェックリストまたはclnotesテーブルを含めると、レコードが1つしか表示されません。関連するテーブルを含めていない場合、すべての苦情が表示されます。

受け入れられた回答

私も同じ問題がありました。なぜこのように動作するのか分かりませんが、それを含めてフィールドを選択すると、私のためにそれを解決しました。次のようなことを試してください:

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は合法ですか? はい、理由を学ぶ