EntityFramework Core延迟加载会返回所有相关表

问题描述 投票:0回答:1

我的数据库中有3个表:国别状态城市

我有一个API,应该返回一个带有其州的国家。

但是,当我尝试这样做时,最终得到一个JSON对象,其中包含国家,其统计信息以及每个州下的所有城市

我的代码是这样的(Eager和Lazy都返回相同的内容:]]

//Eager Loading
var countries = await _context.Countries.Include(s=>s.States).ToListAsync(cancellationToken);

//Lazy Loading
var countries = await _context.Countries.ToListAsync(cancellationToken);

我如何仅将国家/地区加载到州,然后离开城市?

我的数据库中有3个表:国家国家城市我有一个API,应该返回一个带有其国家的国家。但是,当我尝试这样做时,最终得到了带有国家/地区的JSON对象,它的...

entity-framework lazy-loading
1个回答
1
投票

我的建议是永远不要返回实体。实体仅应以其DbContext作为数据模型的表示形式存在。视图或API使用的模型有不同的用途,并且应该是EF可以填充的简单,可序列化的POCO。这使他们仅适合您的视图/消费者所关注的数据。就您而言,您只关心国家和州,而不关心城市或其他相关位。您甚至可能不需要有关一个国家或州的所有数据。让EF为所需的数据建立查询。这样可以提高查询性能,减少服务器和客户端上的内存使用,并避免序列化带来的陷阱。 (即循环引用)实体应始终代表实体的完整状态。关闭延迟加载并传递不完整的实体图很容易导致错误,因为接受实体引用并面对null / empty引用的方法将不知道该引用是否只是未加载或不存在。 >

[Serializable]
public class CountryViewModel
{
    public int CountryID { get; set; }
    public string CountryName { get; set; }
    public IEnumerable<StateViewModel> States { get; set; } = new List<StateViewModel>();
}

[Serializable]
public class StateViewModel
{
    public int StateID { get; set; }
    public string StateName { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.