asp.net-mvc – 在实体框架中我只想包括第一个子对象而不是子的子(sub)
|
我有这两个班: public class BusinessesTBL
{
public string ID { get; set; }
public string FirstName { get; set; }
public string lastName { get; set; }
public ICollection<OffersTBL> OffersTBLs { get; set; }
}
public class OffersTBL
{
public int ID { get; set; }
public string Name { get; set; }
public int CatId { get; set; }
public string BusinessesTBLID { get; set; }
public virtual BusinessesTBL BusinessesTBLs { get; set; }
}
当我尝试根据CatId字段提供所有优惠时,我还需要返回BusinessesTBLs,但是该方法也会再次为每个BusinessesTBL obj返回优惠,我的代码是: public IQueryable<OffersTBL> GetOffersTBLsCat(int id)
{
db.OffersTBLs.Include(s => s.BusinessesTBLs);
}
你可以看到错误的结果: 您可以看到它返回每个业务对象下的所有优惠,而在每个提供下的业务对象,我只想在Business obj下返回没有提供的业务对象的优惠。 请问有人帮忙吗? 解决方法这是因为实体框架执行关系修正,这是在上下文中存在属于该对象的对象时自动填充导航属性的过程。所以通过循环引用,您可以无缝地向下钻取导航属性,即使禁用惰性加载。 Json serializer完全是这样(但是显然它被指示来处理循环引用,所以它不会陷入无止境循环)。诀窍是防止关系修复从以前的打击。关系修补依赖于上下文的ChangeTracker,该缓存缓存对象跟踪其更改和关联。但是如果没有什么可追踪的话,没有什么可以解决的。您可以通过调用AsNoTracking()来停止跟踪: db.OffersTBLs.Include(s => s.BusinessesTBLs)
.AsNoTracking()
除此之外,您还可以禁用上下文中的延迟加载(通过设置contextConfiguration.LazyLoadingEnabled = false),您将看到只有OffersTBL.BusinessesTBLs填充在Json字符串中,并且BusinessesTBL.OffersTBLs是空数组。 一个好处是,AsNoTracking()会提高性能,因为更改跟踪器不是跟踪EF实现的所有对象。实际上,您应该始终在断开连接的设置中使用它。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – @ Html.DropDownList width
- asp.net-mvc – 在ASP.NET MVC ViewModel类中获取数据?
- asp.net – 在web.config或数据库中存储配置设置
- asp.net – 实体框架到多个数据库(同一架构)在运行时?
- asp.net – 访问asp:从代码背后的内容
- asp.net-core – .net core(csproj)global.json’projects’
- asp.net – 如何使用Log4Net启用IP地址记录
- asp.net – 如何在.net WebApi2应用程序中使用OAuth2令牌请
- ASP.NET MVC 1是否与ASP.NET MVC 2兼容?
- asp.net – 如何从水晶报表中的组字段中删除组名
