我正在创建一个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表时,只显示一条记录?当我没有包含相关表格时,所有投诉都会显示出来。
答案 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;
});