gpt4 book ai didi

c# - Entity Framework 实体不显示相关实体的属性

转载 作者:太空宇宙 更新时间:2023-11-03 20:37:31 26 4
gpt4 key购买 nike

我是 Entity Framework 的新手。我使用 Ninject 在 MVC 中创建了一个多层应用程序。
我在数据库中有三个表。说表 A、表 B 和表 C。

Table A has a foreign key relating it to Table B  
Table B has a foreign key relating it to Table C

Table A => Table B => Table C

我的应用程序有一个将从 MVC Controller 调用的“服务”。
该服务充当每个实体(即 TableAService、TableBService)的存储库,负责从 EF DataContext 中创建、读取、更新或删除实体,以及可能对这些实体执行业务逻辑。

在我的 MVC Controller 中,我引用了相应的服务。例如:

private TableAService _tableAService;

public TableAController(EFDataContext dataContext)
{
_tableAService = new TableAService(dataContext);
}

public ActionResult Index()
{
return View();
}

TableAService 看起来像这样:

private EFDataContext _dataContext;

public TableAService(EFDataContext dataContext)
{
_dataContext = dataContext;
}

public TableA GetById(int tableAId)
{
_dataContext.TableA.SingleOrDefault(ta => ta.TableAId == tableAId);
}

我很欣赏示例的服务将与数据源紧密耦合,我的实际实现略有不同,但概念是相同的,我有一个带有 dataContext 的服务,我想从中返回实体。

问题:- 当我在 TableAService 的 GetById 方法中时,SingleOrDefault 给我一个 TableB 导航属性,它允许我访问所有 TableB 的属性,包括 TableC 导航属性。

但是,当我将 TableA 传回 Controller 时,我无法访问 TableB 的任何属性。

在服务中我也尝试过:

private ObjectSet<TableA> _objSet = _dataContext.CreateObjectSet<TableA>();

return _objSet.SingleOrDefault(ta => ta.TableAId == tableAId);

这对于从 TableA 实体访问 TableB 上的 TableC 导航属性似乎没有任何区别。

如有任何帮助,我们将不胜感激!

干杯,

詹姆斯

最佳答案

导航属性的内容只能在事件 ObjectContext 的范围内加载。

这是必需的,因为将通过往返数据库获取实际行。
在您的情况下,您正在尝试访问 ObjectContext 之后的导航属性。最初用于检索实体的已被处置并且连接丢失。

假设您使用的是 Entity Framework 4这个问题有两种解决方案:

  • 预先加载:预先加载相关实体,即您明确指示 Entity Framework 在检索查询结果时加载所有相关实体。
    这是可以做到的通过几种不同的方式:通过在查询的投影中包含相关实体,通过调用 ObjectQuery.Include方法或通过调用 Load导航属性上的方法,或者 ObjectContext.LoadProperty方法。
  • 延迟加载:相关实体按需加载,即在首次访问导航属性的 getter 时加载。请注意,这仍然必须在 ObjectContext 的范围内完成。

在您的情况下,使用 Include 进行预加载方法可能是最合适的解决方案:

public TableA GetById(int tableAId)
{
return _dataContext.TableA
.Include("TableB.TableC") // use dot-notation to specify depth in the object graph
.SingleOrDefault(ta => ta.TableAId == tableAId);
}

相关资源:

关于c# - Entity Framework 实体不显示相关实体的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4448443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com