实体框架查询中的难以置信的重复特定视图的SQL查询返回3个不同的行。select*fromvwSummarywherevidate>='10-15-2010'andvidate<='10-15-2010'andidno='0330'orderbyviDate但如果我通过我的实体框架运行相同的查询,我得到3行,但是3行都是一样的,相当于第三行。firstVisibleDate=newDateTime(2010,10,15);lastVisibleDate=newDateTime(2010,10,15);varp1=(fromvindb.vwSummarywherev.viDate>=firstVisibleDate&&v.viDate<=lastVisibleDate&&v.IDNo=="0330"selectv).ToList();有人可以帮我弄这个吗。编辑:我改变了我的查询,这有效。但我仍然想回到上面显示的那个,因为我必须再次迭代以进行更多处理。Listp1=(fromvindb.vwSummarywherev.viDate>=firstVisibleDate&&v.viDate<=lastVisibleDate&&v.IDNo=="0330"selectnew{a=vab=vb}).ToList();我有一个类似的问题,我通过更改ObjectSet的合并选项解决了它。示例:使用(TargetDBDataContextdb=newTargetDBDataContext()){db.SomeView.MergeOption=System.Data.Objects.MergeOption.NoTracking;返回db.SomeView.ToList();看起来实体框架(EF)无法正确处理具有重复主键或根本没有主键的视图。因此,当EF认为有两行相等时,EF将按原样加载第一行,但不会加载第二行,因为它会认为它已经加载了。EntityFramework提供了许多性能调整选项来帮助您优化应用程序的性能。调整选项之一是.AsNoTracking()。此优化允许您告诉EntityFramework不要跟踪查询结果。这意味着实体框架不会对查询返回的实体执行额外的处理或存储。但是,这也意味着您无法更新这些实体,除非将它们重新连接到跟踪图。您可以直接在视图上设置AsNoTracking选项来解决这个问题。语境。查看名称。作为无跟踪()。其中(x=>x.ColumnName!=null);在视图的实体模型上设置实体键。这在两种不同的情况下对我有用。您可以在密钥中使用一个或多个属性。解决方案:我更改了我的查询并且它有效。但我仍然想回到上面显示的那个,因为我必须再次迭代以进行更多处理。Listp1=(fromvindb.vwSummarywherev.viDate>=firstVisibleDate&&v.viDate{a=vab=vb}).ToList();我从这里和这里找到了问题的根源。我猜这应该是个问题,因为在我看来,我没有真正好的密钥,因为该视图更像是一份摘要报告。所以我坚持使用我在其他答案中找到的解决方法。所以如果你发现类似的问题,问题是,将正确的主键添加到你的表或视图中。如果您不能添加类似解决方法的内容。我刚遇到这个问题,并认为这是我的实现,直到我找到这篇文章。我设法开始工作的唯一解决方法是像这样实际运行sqlquery:-以上是C#学习教程的全部内容:实体框架查询中令人难以置信的重复共享,如果它对任何人都有用并且需要了解更多关于C#学习教程,希望大家多多关注—using(vardb=newTpr.Models.MyContext()){varmodel=_uow._context.Database.SqlQuery(string.Format("select*fromMyTablewhereID='{0}'","12345678"));断言.IsNotNull(模型);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
