实体框架核心包含方法不起作用。预先加载延迟加载无法正常工作



关系表不会添加到工作站(列表(中。紧急加载和延迟加载都不起作用。关联的电台列表始终为零。我使用的是aspnet核心mvc 5.0。有图书馆不见了吗?它从数据库中提取数据,但不提取任何关联的数据。

[HttpGet]
public IActionResult Index(int? SayfaNo)
{
int _sayfaNo = SayfaNo ?? 1;
// Proplem is here. Networks.Stations.Count=0  always 
var networks = _context.Networks.Include(x=>x.Stations).ToList();
//.ToPagedList<Network>(_sayfaNo, 9);
if (networks == null)
{
return View(networks);
}
var request = Request;
if (request.Headers!=null)
{
if (request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
return PartialView("~/Views/Home/_BicycleListPartialView.cshtml", networks);
}
}
return View(networks);
}
public class Network:BaseEntity
{
public Network()
{
Stations = new HashSet<Station>();
}
public string NId { get; set; }
public string Name { get; set; }
[ForeignKey("Location")]
public int LocationId { get; set; }
public virtual  Location Location { get; set; }
public virtual ICollection<Station> Stations { get; set; }
}
public class Location:BaseEntity
{
public string Country { get; set; }
public string City { get; set; }
public virtual Network Network { get; set; }
}
public class Station:BaseEntity
{
public string SId { get; set; }
public string Name { get; set; }
public int? FreeBikes { get; set; }
public int? EmptySlots { get; set; }
[ForeignKey("Network")]
public int NetworkId { get; set; }
public virtual Network Network { get; set; }
}
public class BaseEntity
{
[Key]
public int Id { get; set; }
}

我看到了几个问题:

[ForeignKey]属性可以放在导航属性或FK字段上,但该属性必须指向其他属性。也就是说,如果你把它放在FK字段上,它应该指向导航属性:

[ForeignKey("Network")]
public int NetworkId { get; set; }
public virtual Network Network { get; set; }

或者这个:

public int NetworkId { get; set; }
[ForeignKey("NetworkId")]
public virtual Network Network { get; set; }

在位置和网络之间声明的一对一关系似乎也存在冲突,其中网络应具有单个位置,而位置具有单个网络。默认情况下,一对一关系期望在两个表的PK上联接。如果这是一种多对一关系(网络有一个位置,位置可以是许多网络的一部分,但可以有一个"默认"网络(,则位置将需要网络的FK。(即DefaultNetworkId(以及网络和位置之间的关系需要明确配置。如果多对一关系从位置到网络,也是如此。如果它是一对一的关系,那么我相信EF Core可以配置1对1/w配对的FK,否则它会期望它们的ID匹配。无论哪种方式,都可能需要对关系进行一些显式配置。

接下来,我将避免在构造函数中初始化引用导航属性。初始化对象或集合是可以的,但要避免初始化引用:

public Network()
{
// Location = new Location(); <- don't initialize as a *new* one is not a valid state.
Stations = new HashSet<Station>();
}

最新更新