我这里有一个奇怪的问题。
在我的数据库中,我有一个名为" NeighbourCountry"的表: 它由来源国和相关的邻国组成。
public class NeighbourCountry
{
[Key]
public int NeighbourCountryID { get; set; }
public Country Source { get; set; }
public Country Neighbour { get; set; }
}
它像这样的模式填充:
source_a,neighbour_x
source_a,neighbour_u
source_a,neighbour_t
source_b,neighbour_n
source b,neighbour_p
现在我只想用一个简单的方法来获得一个国家的邻居: (为了便于调试,我只想尝试一个国家的第一个邻居)
private string GetNeighbours(ApplicationDbContext context, Country paracountry)
{
var neighbours = context.NeighbourCountries.Where(b => b.Source.CountryID == paracountry.CountryID).FirstOrDefault();
return "";
}
现在,当我将鼠标悬停在"邻居"时,我明白了:
正如你所看到的,它确实找到了源国,但是说它没有邻居。 这是不正确的,数据库充满了这些数据:
此案例中的来源国家/地区是ID为1的国家/地区。 在数据库中,ID为1的国家/地区与其邻居正确列出。
现在出现了更奇怪的部分: 当我以相反的方式尝试它时,直接LINQing到邻居而不是源,我得到相同的场景,反过来。
var neighbours = context.NeighbourCountries.Where(b => b.Neighbour.CountryID == paracountry.CountryID).FirstOrDefault();
正如我所说,然后我明白了:
所以Linq找到了这个邻居,但现在它无法找到第一个相关的来源国。 我似乎无法连接源国和邻国。
你知道可能出现什么问题吗?
非常感谢你!
答案 0 :(得分:1)
我想说的只是延迟加载的问题。
如果要检索“邻居”和“源”,请使用“包含”
逐步加载它们context.NeighbourCountries
.Include(m => m.Neighbour)
.Include(m => m.Source)
.Where(b => b.Neighbour.CountryID == paracountry.CountryID).FirstOrDefault();
(事实上,你不需要包含where子句中的相关实体,但这可能使事情更清楚。)