实体框架查询中令人难以置信的重复 [英] Unbelievable duplicate in an Entity Framework Query

查看:112
本文介绍了实体框架查询中令人难以置信的重复的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  select * from vwSummary 
where vidate > = '10 -15-2010'和vidate <= '10 -15-2010'
和idno ='0330'
通过viDate命令
但是如果我通过我的实体框架运行相同的查询,我会得到3行,但所有3行都相同,相当于第三行。



  firstVisibleDate = new DateTime(2010,10,15); 

lastVisibleDate = new DateTime(2010,10,15);

var p1 =(from v in db.vwSummary
其中v.viDate> = firstVisibleDate&& v.viDate< = lastVisibleDate
&& v .IDNo ==0330
select v).ToList();

有人可以帮我解决这个问题。



编辑:
我更改了我的查询,这样它可以工作。但是我仍然想回到上面显示的那个,因为我必须再次迭代才能进行更多的处理。

 列表< objectName> p1 =(from v in db.vwSummary 
其中v.viDate> = firstVisibleDate&& v.viDate< = lastVisibleDate
&& v.IDNo ==0330
选择新< ObjectName>
{
a = va
b = vb
}
).ToList< ObjectName>();


解决方案

我有一个类似的问题,我通过更改ObjectSet的合并选项。
示例:

  using(TargetDBDataContext db = new TargetDBDataContext())
{
db .SomeView.MergeOption = System.Data.Objects.MergeOption.NoTracking;
返回db。 SomeView.ToList();
}

看起来实体框架(EF)不能正确处理重复的主键或根本没有主键。所以当EF有两行考虑相等时,EF将加载第一行,因为它应该是第二行,因为它会考虑它已经加载了。


My SQL query against a particular view returns me 3 different rows.

 select * from vwSummary
 where vidate >= '10-15-2010' and vidate <= '10-15-2010'
 and idno = '0330'
 order by viDate

But if i run the same query through my entity framework, I get 3 rows but all the 3 rows are same, equivalent to the third row.

        firstVisibleDate = new DateTime(2010, 10, 15);

        lastVisibleDate = new DateTime(2010, 10, 15);

var p1 = (from v in db.vwSummary
                     where v.viDate >= firstVisibleDate && v.viDate <= lastVisibleDate
                     && v.IDNo == "0330"
                          select v).ToList();

Can someone please help me to resolve this issue.

EDIT: I changed my query like this and it works. But still I want to go back to the one shown above as I have to iterate again for more processing.

List<objectName> p1 = (from v in db.vwSummary
                     where v.viDate >= firstVisibleDate && v.viDate <= lastVisibleDate
                     && v.IDNo == "0330"
                          select new <ObjectName>
{
a = v.a
b = v.b
}
).ToList<ObjectName>();

解决方案

I had a similar issue and I solved it by changing the merge option of the ObjectSet. Example:

    using (TargetDBDataContext db = new TargetDBDataContext())
    {
        db.SomeView.MergeOption = System.Data.Objects.MergeOption.NoTracking;
        return db. SomeView.ToList();
    }

It looks like entity framework(EF) doesn’t handle correctly views that have duplicated primary keys or no primary keys at all. So when there are two rows that EF is considering equal, EF will load first row as it should but will not load the second row because it will consider it’s already loaded.

这篇关于实体框架查询中令人难以置信的重复的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆