【问题标题】:SQL LINQ query keeps looping through two tablesSQL LINQ 查询不断循环遍历两个表
【发布时间】:2018-01-15 08:31:48
【问题描述】:

我试图在 asp.net 5 中调用 linq 查询。但是,我的查询导致两个表之间的数据无限循环。

Logs (logs_historical)
 meterID (FK)
 log_data
 -----
Meters
 meter_uid (PK)

我的目标是拥有与一米相关的多个日志。

 Relationships
 Foreign key Base Table = logs
 Foreign key Column = meterID
 Primary Base Table = meters
 Primary Key Colum = meterID

这是我的 linq 查询

 records = dbContext.logs.Where(e =>(e.timestamp.Value.Month == inputDate.Month)).ToList() ;

1)这个截图显示了表信息和(外键表) 当我查看外键表信息时,它也有日志。 进入日志将显示图(1)中的同一张表

2) 我确定以前有人问过这个问题,但我不知道这个问题叫什么。我是数据库新手。感谢您的建议!

【问题讨论】:

    标签: c# asp.net sql-server database linq


    【解决方案1】:

    作为一个快速修复,您可能可以使用 dbContext.Configuration.LazyLoadingEnabled = false; 就在您的查询之前。您也可以全局禁用它。

    实体框架会急切地加载所有相关实体。如果你有几个层次的实体,或者相互引用,那么,正如你所经历的那样,它将继续遵循这些关系。禁用延迟加载将防止这种情况发生。请注意,您必须通过 .include() 函数显式声明要包含的任何内容。

    另一种选择是重新设计您的数据库,这样就不会出现这种情况,但有时这并不可行。我真的不知道你项目的复杂运作,所以我在这里推测。

    编辑:

    我忘记补充了,如果您进入模型浏览器并探索 Entity Framework 为您创建的模型,您会发现导致问题的那些关系。如果您首先使用代码,则可以轻松解决此问题。如果您首先使用数据库,那么您在某种程度上受 EF 如何解释关系的摆布。

    【讨论】:

    • 我觉得这个lazyloading功能是我想要的。但是,当我实现该功能时,什么都没有改变。该实体仍会查询所有导航表。我首先使用数据库 =\ ..
    • 感谢您对lazyLoading 的建议...我做了更多研究并遇到了这个问题stackoverflow.com/questions/16357141/… 真正的解决方案是同时添加lazyLoadingEnabled= false 和dbContext.logs.AsNoTracking()。哪里(...)
    • 酷!很高兴我能指出你正确的方向。我没有考虑跟踪。
    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多