Error querying a table with the Data Entity Framework<p align=left><font face=Arial size=2></font> </p> <p>I am getting an error that is driving me nuts. Here is the deal;</p> <p align=left>I run this query without any problems:</p> <p align=left> </p><font size=2> <p></font><font color="#0000ff" size=2>var</font><font size=2> jobrows = (</font><font color="#0000ff" size=2>from</font><font size=2> p </font><font color="#0000ff" size=2>in</font><font size=2> tx.<font size=2>job_mst</p></font> <p></font><font color="#0000ff" size=2>where</font><font size=2> p.wbs_obj_nbr == 1</p> <p></font><font color="#0000ff" size=2>select</font><font size=2> p).ToList();</p> <p>//check the output</font><font color="#008000" size=2></p></font><font size=2> <p></font><font color="#0000ff" size=2>if</font><font size=2> (jobrows.Count() == 0)</font></p> <p align=left> </p> <p align=left><font size=2>If the query doesn't return any rows, everything is fine, and my count will be 0.</p> <p> </p> <p align=left>But then I run another, which is almost the same</p><font size=2> <p></font><font color="#0000ff" size=2>var</font><font size=2> jobtypes = (</font><font color="#0000ff" size=2>from</font><font size=2> p </font><font color="#0000ff" size=2>in</font><font size=2> tx.job_type_avt</p> <p></font><font color="#0000ff" size=2>where</font><font size=2> p.job_type_cd == wbs.PRART</p> <p></font><font color="#0000ff" size=2>select</font><font size=2> p).ToList();</font></p> <p align=left><font size=2> </p></font><font size=2> <p></font><font color="#0000ff" size=2>if</font><font size=2> (jobtypes.Count == 0)</p> <p> </p> <p align=left>Here the code blows up with an error and doesn't even reach the if statement:</p> <p align=left><font color="#0000ff"><span class=m>&lt;?</span><span class=pi>xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot; </span><span class=m>?&gt;</span></font> </p> <div class=e> <div class=c style="margin-left:1em;text-indent:-2em"><a class=b><strong><font face="Courier New" color="#ff0000">-</font></strong></a> <span class=m><font color="#0000ff">&lt;</font></span><span class=t><font color="#990000">error</font></span><span class=ns><font color="#ff0000"> xmlns</font></span><span class=m><font color="#0000ff">=&quot;</font></span><b class=ns><font color="#ff0000">http://schemas.microsoft.com/ado/2007/08/dataservices/metadata</font></b><font color="#0000ff"><span class=m>&quot;</span><span class=m>&gt;</span></font></div> <div class=e> <div style="margin-left:1em;text-indent:-2em"><span class=b><strong><font face="Courier New" color="#ff0000"> </font></strong></span> <span class=m><font color="#0000ff">&lt;</font></span><span class=t><font color="#990000">code</font></span> <span class=m><font color="#0000ff">/&gt;</font></span> </div></div> <div class=e> <div style="margin-left:1em;text-indent:-2em"><span class=b><strong><font face="Courier New" color="#ff0000"> </font></strong></span> <span class=m><font color="#0000ff">&lt;</font></span><span class=t><font color="#990000">message</font></span><span class=ns><font color="#ff0000"> xml:lang</font></span><span class=m><font color="#0000ff">=&quot;</font></span><b class=ns><font color="#ff0000">en-US</font></b><font color="#0000ff"><span class=m>&quot;</span><span class=m>&gt;</span></font><span class=tx><strong>Resource not found for the segment 'job_type_avt'.</strong></span><span class=m><font color="#0000ff">&lt;/</font></span><span class=t><font color="#990000">message</font></span><span class=m><font color="#0000ff">&gt;</font></span> </div></div> <div><span class=b><strong><font face="Courier New" color="#ff0000"> </font></strong></span> <span class=m><font color="#0000ff">&lt;/</font></span><span class=t><font color="#990000">error</font></span><span class=m><font color="#0000ff">&gt;</font></span></div> <div align=left><span class=m><font color="#0000ff"></font></span> </div> <div align=left><span class=m><font color="#000000">The only difference between the two tables is that the primary key for the first one is composed of int members, while the second one is a string (char(2) in the DB). I am not sure this is relevant, but just in case. I am just querying the table, not deleting or anything like that.</font></span></div> <div align=left><span class=m></span> </div> <div align=left><span class=m>Can somebody provide an idea of what's going on in here, and what I may be doing wrong?</span></div> <div align=left><span class=m>Thanks in advance!</span></div></div></font></font>© 2009 Microsoft Corporation. All rights reserved.Wed, 10 Dec 2008 23:41:27 Z8aab60aa-e00e-45d9-bd37-015fae4b9d21http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/8aab60aa-e00e-45d9-bd37-015fae4b9d21#8aab60aa-e00e-45d9-bd37-015fae4b9d21http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/8aab60aa-e00e-45d9-bd37-015fae4b9d21#8aab60aa-e00e-45d9-bd37-015fae4b9d21BizBloghttp://social.msdn.microsoft.com/Profile/en-US/?user=BizBlogError querying a table with the Data Entity Framework<p align=left><font face=Arial size=2></font> </p> <p>I am getting an error that is driving me nuts. Here is the deal;</p> <p align=left>I run this query without any problems:</p> <p align=left> </p><font size=2> <p></font><font color="#0000ff" size=2>var</font><font size=2> jobrows = (</font><font color="#0000ff" size=2>from</font><font size=2> p </font><font color="#0000ff" size=2>in</font><font size=2> tx.<font size=2>job_mst</p></font> <p></font><font color="#0000ff" size=2>where</font><font size=2> p.wbs_obj_nbr == 1</p> <p></font><font color="#0000ff" size=2>select</font><font size=2> p).ToList();</p> <p>//check the output</font><font color="#008000" size=2></p></font><font size=2> <p></font><font color="#0000ff" size=2>if</font><font size=2> (jobrows.Count() == 0)</font></p> <p align=left> </p> <p align=left><font size=2>If the query doesn't return any rows, everything is fine, and my count will be 0.</p> <p> </p> <p align=left>But then I run another, which is almost the same</p><font size=2> <p></font><font color="#0000ff" size=2>var</font><font size=2> jobtypes = (</font><font color="#0000ff" size=2>from</font><font size=2> p </font><font color="#0000ff" size=2>in</font><font size=2> tx.job_type_avt</p> <p></font><font color="#0000ff" size=2>where</font><font size=2> p.job_type_cd == wbs.PRART</p> <p></font><font color="#0000ff" size=2>select</font><font size=2> p).ToList();</font></p> <p align=left><font size=2> </p></font><font size=2> <p></font><font color="#0000ff" size=2>if</font><font size=2> (jobtypes.Count == 0)</p> <p> </p> <p align=left>Here the code blows up with an error and doesn't even reach the if statement:</p> <p align=left><font color="#0000ff"><span class=m>&lt;?</span><span class=pi>xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot; </span><span class=m>?&gt;</span></font> </p> <div class=e> <div class=c style="margin-left:1em;text-indent:-2em"><a class=b><strong><font face="Courier New" color="#ff0000">-</font></strong></a> <span class=m><font color="#0000ff">&lt;</font></span><span class=t><font color="#990000">error</font></span><span class=ns><font color="#ff0000"> xmlns</font></span><span class=m><font color="#0000ff">=&quot;</font></span><b class=ns><font color="#ff0000">http://schemas.microsoft.com/ado/2007/08/dataservices/metadata</font></b><font color="#0000ff"><span class=m>&quot;</span><span class=m>&gt;</span></font></div> <div class=e> <div style="margin-left:1em;text-indent:-2em"><span class=b><strong><font face="Courier New" color="#ff0000"> </font></strong></span> <span class=m><font color="#0000ff">&lt;</font></span><span class=t><font color="#990000">code</font></span> <span class=m><font color="#0000ff">/&gt;</font></span> </div></div> <div class=e> <div style="margin-left:1em;text-indent:-2em"><span class=b><strong><font face="Courier New" color="#ff0000"> </font></strong></span> <span class=m><font color="#0000ff">&lt;</font></span><span class=t><font color="#990000">message</font></span><span class=ns><font color="#ff0000"> xml:lang</font></span><span class=m><font color="#0000ff">=&quot;</font></span><b class=ns><font color="#ff0000">en-US</font></b><font color="#0000ff"><span class=m>&quot;</span><span class=m>&gt;</span></font><span class=tx><strong>Resource not found for the segment 'job_type_avt'.</strong></span><span class=m><font color="#0000ff">&lt;/</font></span><span class=t><font color="#990000">message</font></span><span class=m><font color="#0000ff">&gt;</font></span> </div></div> <div><span class=b><strong><font face="Courier New" color="#ff0000"> </font></strong></span> <span class=m><font color="#0000ff">&lt;/</font></span><span class=t><font color="#990000">error</font></span><span class=m><font color="#0000ff">&gt;</font></span></div> <div align=left><span class=m><font color="#0000ff"></font></span> </div> <div align=left><span class=m><font color="#000000">The only difference between the two tables is that the primary key for the first one is composed of int members, while the second one is a string (char(2) in the DB). I am not sure this is relevant, but just in case. I am just querying the table, not deleting or anything like that.</font></span></div> <div align=left><span class=m></span> </div> <div align=left><span class=m>Can somebody provide an idea of what's going on in here, and what I may be doing wrong?</span></div> <div align=left><span class=m>Thanks in advance!</span></div></div></font></font>Mon, 01 Dec 2008 22:51:17 Z2008-12-02T20:05:15Zhttp://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/8aab60aa-e00e-45d9-bd37-015fae4b9d21#ba6305ca-4a37-4d3b-9ee3-d39dc40b781bhttp://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/8aab60aa-e00e-45d9-bd37-015fae4b9d21#ba6305ca-4a37-4d3b-9ee3-d39dc40b781bAndrew Conrad - MSFThttp://social.msdn.microsoft.com/Profile/en-US/?user=Andrew%20Conrad%20-%20MSFTError querying a table with the Data Entity Framework<p>Can you post the URIs being generated for the two Linq queries?  You can get this by calling ToString on the query object.</p> <p align=left> </p> <p align=left>Thanks - Andy</p> <p align=left><font face=Arial size=2></font> </p>Tue, 02 Dec 2008 01:33:18 Z2008-12-02T01:33:18Zhttp://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/8aab60aa-e00e-45d9-bd37-015fae4b9d21#a951cac5-2a15-4631-87d9-0078225943a9http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/8aab60aa-e00e-45d9-bd37-015fae4b9d21#a951cac5-2a15-4631-87d9-0078225943a9BizBloghttp://social.msdn.microsoft.com/Profile/en-US/?user=BizBlogError querying a table with the Data Entity Framework<p align=left><font face=Arial size=2>Hi, Andy:</font></p> <p align=left>Thanks for the quick response.</p> <p align=left>Here are the two URIs:</p> <p align=left>1. &quot;<a title="http://localhost/IntegrationBus.Services.Data.ODS/ODSDataService.svc/job_mst()?$filter=wbs_obj_nbr" href="http://localhost/IntegrationBus.Services.Data.ODS/ODSDataService.svc/job_mst()?$filter=wbs_obj_nbr">http://localhost/IntegrationBus.Services.Data.ODS/ODSDataService.svc/job_mst()?$filter=wbs_obj_nbr</a> eq '133'&quot;</p> <p align=left><br>2. &quot;<a title="http://localhost/IntegrationBus.Services.Data.ODS/ODSDataService.svc/job_type_avt('SH'" href="http://localhost/IntegrationBus.Services.Data.ODS/ODSDataService.svc/job_type_avt('SH'">http://localhost/IntegrationBus.Services.Data.ODS/ODSDataService.svc/job_type_avt('SH'</a>)&quot;<br></p> <p>Thanks, Enrique</p>Tue, 02 Dec 2008 13:49:10 Z2008-12-02T13:49:10Zhttp://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/8aab60aa-e00e-45d9-bd37-015fae4b9d21#7b63a1bc-701c-4a7f-8a98-fd1f1777cc44http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/8aab60aa-e00e-45d9-bd37-015fae4b9d21#7b63a1bc-701c-4a7f-8a98-fd1f1777cc44Andrew Conrad - MSFThttp://social.msdn.microsoft.com/Profile/en-US/?user=Andrew%20Conrad%20-%20MSFTError querying a table with the Data Entity Framework<p class=MsoNormal style="margin:0in 0in 0pt"><font face=Calibri size=3>In the firsr query the Linq to URI translator does not find all the keys, so it turns the predicate into a filter expression.<span style="">  </span>So essentially this query is returning the set of all </font><span style="font-size:10pt;color:black;font-family:'Arial','sans-serif'">job_mst items filtered by p.wbs_obj_nbr == 1.<span style="">  </span>In this case since there are no objects that satisfy the predicate, an empty set is returned.</span></p> <p class=MsoNormal style="margin:0in 0in 0pt"><span style="font-size:10pt;color:black;font-family:'Arial','sans-serif'"> </span></p> <p class=MsoNormal style="margin:0in 0in 0pt"><span style="font-size:10pt;color:black;font-family:'Arial','sans-serif'">For the second query, the Linq expression has included all the keys in the predicate, so a URI that is looking for one specific entity is created.<span style="">  </span>The semantics for this differ slightly in that this query will only return a single entity – and if that specific entity does not exist a HTTP error 404 (Resource not found) will be raised.</span></p> <p class=MsoNormal style="margin:0in 0in 0pt"><span style="font-size:10pt;color:black;font-family:'Arial','sans-serif'"> </span></p> <p class=MsoNormal style="margin:0in 0in 0pt"><span style="font-size:10pt;color:black;font-family:'Arial','sans-serif'">We did it this way because we wanted to preserve proper REST semantics.<span style="">  </span>That said, this can be nasty since little subtle changes in the query can change the semantics.<span style="">  </span>i.e. let’s say the C# compiler added an implicit cast in the predicate, then the LINQ translator would make a filter instead on a key predicate.</span></p> <p class=MsoNormal style="margin:0in 0in 0pt"><span style="font-size:10pt;color:black;font-family:'Arial','sans-serif'"> </span></p> <p class=MsoNormal style="margin:0in 0in 0pt"><span style="font-size:10pt;color:black;font-family:'Arial','sans-serif'">For vNext we are probably going to add a property to the client library that allows the user to specify that they want 404 error cases returned as empty sets with no exception being thrown.<span style="">  </span>Unfortunately can’t help you much now, but just wanted to let everyone know we are aware of this issue.</span></p> <p align=left><font face=Arial size=2></font> </p>Tue, 02 Dec 2008 20:05:07 Z2008-12-02T20:05:15Zhttp://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/8aab60aa-e00e-45d9-bd37-015fae4b9d21#05b39c6a-c29f-439e-be4d-cacd52f2e04ahttp://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/8aab60aa-e00e-45d9-bd37-015fae4b9d21#05b39c6a-c29f-439e-be4d-cacd52f2e04aBizBloghttp://social.msdn.microsoft.com/Profile/en-US/?user=BizBlogError querying a table with the Data Entity Framework<p align=left><font face=Arial size=2>Thanks, Andy. We will keep this in mind.</font></p> <p align=left>For the moment we'll have to hack our code a little bit, and hope to hear from you guys again.</p>Tue, 02 Dec 2008 20:30:48 Z2008-12-02T20:30:48Z