asp.net-mvc – 在实体框架中我只想包括第一个子对象而不是子的
我有这两个班:
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实现的所有对象。实际上,您应该始终在断开连接的设置中使用它。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- IIS 7.0的ASP.NET进程是什么?
- asp.net – 如何防止在BundleTransformer中使用* .min.js?
- asp.net – 与WCF和其他Web服务有什么区别?
- asp.net-mvc – 仍然在存储库和解耦,ASP.NET MVC上丢失
- asp.net-mvc – 发送电子邮件是否属于应用程序的表示层或业
- DateTime数据注释在ASP.NET Core RC2应用程序中不起作用
- entity-framework – 从Entity Framework 6升级到EF Core
- asp.net – 使用redirectMode =“ResponseRewrite”的custo
- 在ASP.NET菜单控件中设置item.selected
- asp.net-mvc – ActionResult上的自定义属性
- asp.net-mvc – 如何在RouteTable MVC.Net中手动
- ASP.NET MVC中的角色缓存策略
- asp.net – 防止VB.NET中的属性序列化
- asp.net-mvc-2 – 后退按钮不请求asp.net mvc ge
- ASP.NET MVC – 返回JavaScriptResult不起作用
- asp.net-mvc – OAuth 2 Google API刷新令牌为空
- ASP.NET Core WebAPI 实现CRUD
- 详解ASP.NET Core 在 JSON 文件中配置依赖注入
- asp.net-web-api – Web API中的Actions和QueryS
- asp.net – 使用谷歌地图api的ASP .NET