<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jim O'Neil's Blog : ADO.NET Data Services</title><link>http://blogs.msdn.com/jimoneil/archive/tags/ADO.NET+Data+Services/default.aspx</link><description>Tags: ADO.NET Data Services</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>J is for.. JSON</title><link>http://blogs.msdn.com/jimoneil/archive/2009/03/09/j-is-for-json.aspx</link><pubDate>Mon, 09 Mar 2009 07:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9466487</guid><dc:creator>joneil</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jimoneil/comments/9466487.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimoneil/commentrss.aspx?PostID=9466487</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jimoneil/WindowsLiveWriter/Jisfor.JSON_EC8E/j_2.gif"&gt;&lt;img style="border-right-width: 0px; margin: 0px 15px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="J" border="0" alt="J" align="left" src="http://blogs.msdn.com/blogfiles/jimoneil/WindowsLiveWriter/Jisfor.JSON_EC8E/j_thumb.gif" width="46" height="78" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;No, not the Greek hero who scored the Golden Fleece; this JSON (note – there’s no ‘a’ here) stands for JavaScript Object Notation.&amp;#160;&amp;#160; JSON is quite simply a serialization format for data that leverages JavaScript as the encoding mechanism.&amp;#160; With JSON you can encode data structures and arrays as simple strings (that happen to be valid JavaScript syntax) and pass the strings between applications and services.&amp;#160; &lt;/p&gt;  &lt;p&gt;Technically, it’s a language-independent mechanism; after all, it’s just a string much like XML is just a string.&amp;#160; However, given the ties to JavaScript and the ability to quickly instantiate (or hydrate) the string representation into a complex object that can be manipulated in the browser’s Document Object Model (DOM), JSON is a favorite interchange format for browser-based AJAX (Asynchronous JavaScript and XML) applications.&amp;#160; &lt;/p&gt;  &lt;p&gt;The JSON format is formally described in &lt;a href="http://tools.ietf.org/html/rfc4627"&gt;RFC 4627&lt;/a&gt; and was based on the &lt;a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm"&gt;ECMAScript Language Specification&lt;/a&gt;.&amp;#160;&amp;#160; It’s an exceptionally light weight representation, whose primary facets are pretty much captured by the following list:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;simple data types      &lt;ul&gt;       &lt;li&gt;string &lt;/li&gt;        &lt;li&gt;number (decimal and exponential notation) &lt;/li&gt;        &lt;li&gt;boolean &lt;/li&gt;        &lt;li&gt;literals (namely, &lt;code&gt;null&lt;/code&gt;, &lt;code&gt;true&lt;/code&gt;, and &lt;code&gt;false&lt;/code&gt;) &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;structure types      &lt;ul&gt;       &lt;li&gt;object (delmited by { }) &lt;/li&gt;        &lt;li&gt;arrays (delimted by [ ] ) &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;MIME type: &lt;code&gt;application/json&lt;/code&gt; &lt;/li&gt;    &lt;li&gt;Unicode with UTF-8 as default encoding &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So for instance, the following is JSON for an object with two string fields representing my name:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;{&amp;quot;firstname&amp;quot; : &amp;quot;Jim&amp;quot;, &amp;quot;lastname&amp;quot; : &amp;quot;O’Neil&amp;quot; }&lt;/code&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;and here’s one with a bit more information for one of our favorite moms:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;{
     &amp;quot;firstName&amp;quot;: &amp;quot;Carol&amp;quot;,
     &amp;quot;lastName&amp;quot;: &amp;quot;Brady&amp;quot;,
     &amp;quot;address&amp;quot;: {
         &amp;quot;street&amp;quot;: &amp;quot;4222 Clinton Avenue&amp;quot;,
         &amp;quot;city&amp;quot;: &amp;quot;Santa Monica&amp;quot;,
         &amp;quot;state&amp;quot;: &amp;quot;CA&amp;quot;,
         &amp;quot;postalCode&amp;quot;: 90401
     },
     &amp;quot;children&amp;quot;: [
         &amp;quot;Cindy&amp;quot;,
         &amp;quot;Bobby&amp;quot;,
         &amp;quot;Jan&amp;quot;,
         &amp;quot;Peter&amp;quot;,
         &amp;quot;Marcia&amp;quot;,
         &amp;quot;Greg&amp;quot;
    ]
 }&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;If I use the shorter example in an HTML/JavaScript page like this:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&amp;lt;HTML&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;lt;BODY&amp;gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;   &amp;lt;SCRIPT type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;     function showName(jsonString)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;     {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        jsonString = &lt;span class="str"&gt;'{ \&amp;quot;firstname\&amp;quot; : \&amp;quot;Jim\&amp;quot;,'&lt;/span&gt; +&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                     &lt;span class="str"&gt;'  \&amp;quot;lastname\&amp;quot; : \&amp;quot;O\'Neil\&amp;quot; }'&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        var f = eval(&lt;span class="str"&gt;&amp;quot;(&amp;quot;&lt;/span&gt; + jsonString + &lt;span class="str"&gt;&amp;quot;)&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        alert(f.firstname + &lt;span class="str"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + f.lastname);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;     }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &amp;lt;/SCRIPT&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &amp;lt;INPUT Type=&lt;span class="str"&gt;&amp;quot;Button&amp;quot;&lt;/span&gt; onclick=&lt;span class="str"&gt;&amp;quot;showName();&amp;quot;&lt;/span&gt; Value=&lt;span class="str"&gt;&amp;quot;Who am I?&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&amp;lt;/BODY&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
































.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;the result is a simple page, with a button, that when clicked yields the alert box you see here:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jimoneil/WindowsLiveWriter/Jisfor.JSON_EC8E/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Who am I?" border="0" alt="Who am I?" src="http://blogs.msdn.com/blogfiles/jimoneil/WindowsLiveWriter/Jisfor.JSON_EC8E/image_thumb.png" width="240" height="230" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that the magic here is on Line 8.&amp;#160; The built-in &lt;code&gt;eval&lt;/code&gt; function accepts a string containing JavaScript and just evaluates it – whatever it happens to be.&amp;#160; &lt;/p&gt;

&lt;p&gt;Of course, we’re not going to be hard-coding strings in real applications, but rather interacting with user input and on-line services that pass data back and forth in JSON notation, and that brings up the question of security.&amp;#160; If the &lt;code&gt;eval&lt;/code&gt; method takes any old JavaScript string, what’s to prevent something like this?&amp;#160; &lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&amp;lt;HTML&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&amp;lt;BODY&amp;gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;   &amp;lt;SCRIPT type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;     function showName(jsonString)&lt;/pre&gt;

  &lt;pre class="alt"&gt;     {&lt;/pre&gt;

  &lt;pre&gt;        jsonString = &lt;span class="str"&gt;'alert(&amp;quot;You have been invaded&amp;quot;)'&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;        var f = eval(&lt;span class="str"&gt;&amp;quot;(&amp;quot;&lt;/span&gt; + jsonString + &lt;span class="str"&gt;&amp;quot;)&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;        alert(f.firstname + &lt;span class="str"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + f.lastname);&lt;/pre&gt;

  &lt;pre class="alt"&gt;     }&lt;/pre&gt;

  &lt;pre&gt;    &amp;lt;/SCRIPT&amp;gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;    &amp;lt;INPUT Type=&lt;span class="str"&gt;&amp;quot;Button&amp;quot;&lt;/span&gt; onclick=&lt;span class="str"&gt;&amp;quot;showName();&amp;quot;&lt;/span&gt; Value=&lt;span class="str"&gt;&amp;quot;Who am I?&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&amp;lt;/BODY&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
































.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="I&amp;#39;ve been hacked!" border="0" alt="I&amp;#39;ve been hacked!" src="http://blogs.msdn.com/blogfiles/jimoneil/WindowsLiveWriter/Jisfor.JSON_EC8E/image_thumb_1.png" width="271" height="207" /&gt; 

&lt;p&gt;Per the &lt;a href="http://tools.ietf.org/html/rfc4627"&gt;RFC&lt;/a&gt;, you can easily prevent these types of attacks via a regular expression (involving some string substitution):&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
             text.replace(/&lt;span class="str"&gt;&amp;quot;(\\.|[^&amp;quot;&lt;/span&gt;\\])*&amp;quot;/g, &lt;span class="str"&gt;''&lt;/span&gt;))) &amp;amp;&amp;amp;
         eval(&lt;span class="str"&gt;'('&lt;/span&gt; + text + &lt;span class="str"&gt;')'&lt;/span&gt;)&lt;/pre&gt;
&lt;style type="text/css"&gt;


























.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Unless you’re a Ph.D. in regular expressions, though, that strikes me as a bit obtuse, not to mention error-prone and a maintenance nightmare.&amp;#160; As an alternative, you might consider some of the following options in lieu of direct use of the built-in &lt;code&gt;eval&lt;/code&gt; function:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.json.org/json_parser.js"&gt;JSON parser&lt;/a&gt; from the &lt;a href="http://json.org"&gt;json.org&lt;/a&gt; site &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.json.org/js.html"&gt;json2.js&lt;/a&gt; library (also at &lt;a href="http://json.org"&gt;json.org&lt;/a&gt;) &lt;/li&gt;

  &lt;li&gt;jQuery’s &lt;a href="http://docs.jquery.com/GetJSON"&gt;&lt;code&gt;getJSON&lt;code&gt;&lt;/code&gt; method &lt;/code&gt;&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.microsoft.com/windows/internet-explorer/beta/readiness/developers-new.aspx#json"&gt;&lt;code&gt;JSON.parse&lt;/code&gt;&lt;/a&gt; method in IE8 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the areas I’ve been running into JSON frequently is with &lt;a href="http://msdn.microsoft.com/en-us/data/bb931106.aspx"&gt;ADO.NET Data Services&lt;/a&gt; (formerly called “Astoria”).&amp;#160; In a nutshell, ADO.NET Data Services allows you to expose a data model (using &lt;a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx"&gt;Entity Framework&lt;/a&gt;) to provide the underlying model data (often a SQL Server database) as a WCF service to &lt;a href="http://en.wikipedia.org/wiki/REST"&gt;REST&lt;/a&gt; and &lt;a href="http://www.w3.org/TR/2007/REC-soap12-part0-20070427/"&gt;SOAP&lt;/a&gt; clients.&amp;#160; With the REST approach, accessing data is as simple as typing a URL into a browser (which initiates a GET HTTP message to the service).&lt;/p&gt;

&lt;p&gt;With ADO.NET Data Services, the default format is &lt;a href="http://www.ietf.org/rfc/rfc4287.txt"&gt;AtomPub&lt;/a&gt;, so if I browse to a bit of data exposed by my service: &lt;code&gt;http://localhost:27339/roster.svc/Classes&lt;/code&gt;, I get output that looks like the following.&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/jimoneil/WindowsLiveWriter/Jisfor.JSON_EC8E/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="ADO.NET Data Services and Atom" border="0" alt="ADO.NET Data Services and Atom" src="http://blogs.msdn.com/blogfiles/jimoneil/WindowsLiveWriter/Jisfor.JSON_EC8E/image_thumb_2.png" width="518" height="386" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I’d likely be using ADO.NET Client classes or other mechanism to parse the XML and make use of the data, which as you can see includes the name, description, and level of a Golfing course.&lt;/p&gt;

&lt;p&gt;Now I can get a JSON representation of this as well, but not directly through the browser, since I need to provide an HTTP header (&lt;code&gt;Accept: application/json&lt;/code&gt;) to request that the data come back in JSON format.&amp;#160; An easy way to demonstrate this is via &lt;a href="http://www.fiddlertool.com/fiddler/"&gt;Fiddler&lt;/a&gt;, which will allow me to construct the appropriate request.&amp;#160; So now my data comes back looking like:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;{ &lt;span class="str"&gt;&amp;quot;d&amp;quot;&lt;/span&gt; : [
{
&lt;span class="str"&gt;&amp;quot;__metadata&amp;quot;&lt;/span&gt;: {
&lt;span class="str"&gt;&amp;quot;uri&amp;quot;&lt;/span&gt;: &lt;span class="str"&gt;&amp;quot;http://127.0.0.1:27339/roster.svc/Classes(3)&amp;quot;&lt;/span&gt;, 
&lt;span class="str"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;: &lt;span class="str"&gt;&amp;quot;RecordsModel.Class&amp;quot;&lt;/span&gt;
}, &lt;span class="str"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;: 3, &lt;span class="str"&gt;&amp;quot;Subject&amp;quot;&lt;/span&gt;: &lt;span class="str"&gt;&amp;quot;Golf&amp;quot;&lt;/span&gt;, 
&lt;span class="str"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;: &lt;span class="str"&gt;&amp;quot;Golfing For Dummies&amp;quot;&lt;/span&gt;, 
&lt;span class="str"&gt;&amp;quot;Description&amp;quot;&lt;/span&gt;: &lt;span class="str"&gt;&amp;quot;You know who you are&amp;quot;&lt;/span&gt;, 
&lt;span class="str"&gt;&amp;quot;Level&amp;quot;&lt;/span&gt;: 100, &lt;span class="str"&gt;&amp;quot;Version&amp;quot;&lt;/span&gt;: &lt;span class="str"&gt;&amp;quot;AAAAAAAAB+Y=&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;ClassRegistrations&amp;quot;&lt;/span&gt;: {
&lt;span class="str"&gt;&amp;quot;__deferred&amp;quot;&lt;/span&gt;: {
&lt;span class="str"&gt;&amp;quot;uri&amp;quot;&lt;/span&gt;: &lt;span class="str"&gt;&amp;quot;http://127.0.0.1:27339/roster.svc/Classes(3)/ClassRegistrations&amp;quot;&lt;/span&gt;
}…&lt;/pre&gt;
&lt;style type="text/css"&gt;



















.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Note here how the JSON object is wrapped by another object with a single element, &lt;code&gt;d&lt;/code&gt;.&amp;#160; That element is used to thwart an exploit that can leave your data at the hands of evil doers (check out &lt;a href="http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx"&gt;Phil Haack’s great explanation&lt;/a&gt; of how it can happen).&amp;#160; Another thing you might have noticed are a couple of elements preceded by the underscores, like &lt;code&gt;__metadata&lt;/code&gt; and &lt;code&gt;__deferred&lt;/code&gt;.&amp;#160; While they don’t refer to data that you might be interested in per se, they are part of the ADO.NET Data Services Framework that help support lazy loading and object tracking on the client – but that’s another topic for another time!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9466487" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimoneil/archive/tags/A-to-Z/default.aspx">A-to-Z</category><category domain="http://blogs.msdn.com/jimoneil/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category></item><item><title>Thank You Syracuse – I’ll Be Back (March 5th)</title><link>http://blogs.msdn.com/jimoneil/archive/2009/02/12/thank-you-syracuse-i-ll-be-back-march-5th.aspx</link><pubDate>Thu, 12 Feb 2009 19:23:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9415044</guid><dc:creator>joneil</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jimoneil/comments/9415044.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimoneil/commentrss.aspx?PostID=9415044</wfw:commentRss><description>&lt;p&gt;Thanks to newly crowed MVP, Andy Beaulieu, for the invitation to speak on all things Services at the &lt;a href="http://www.cnydevelopers.net"&gt;Central New York .NET Developer Group&lt;/a&gt; last night.&amp;#160; For those of you that didn’t get a chance to get the &lt;a href="http://www.microsoft.com/tag"&gt;Microsoft Tag&lt;/a&gt; leading to the download, here it is again (or just click on the image and go straight to my SkyDrive).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://is.gd/j7KG"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jimoneil/WindowsLiveWriter/ThankYouSyracuseIllBeBack_9E05/image_3.png" width="240" height="199" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now for the Ahnold reference… yes, indeed, I’ll be returning to Syracuse on Thursday, March 5th on the &lt;a href="http://msdnevents.com"&gt;MSDN Events&lt;/a&gt; circuit.&amp;#160; It’s a free afternoon of three different presentations on Windows Azure, Debugging Tips and Tricks, and Windows Mobile Development, so we’ll be all over the map in terms of Microsoft technologies.&amp;#160;&amp;#160; The event is being held at the Regal Carousel Mall Stadium 17 in Syracuse.&amp;#160;&amp;#160; Hope to see you there!&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032402403"&gt;&lt;font size="4"&gt;Register right here, right now.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9415044" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimoneil/archive/tags/New+York/default.aspx">New York</category><category domain="http://blogs.msdn.com/jimoneil/archive/tags/User+Group/default.aspx">User Group</category><category domain="http://blogs.msdn.com/jimoneil/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://blogs.msdn.com/jimoneil/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.msdn.com/jimoneil/archive/tags/cloud+computing/default.aspx">cloud computing</category><category domain="http://blogs.msdn.com/jimoneil/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category></item><item><title>.NET Framework 3.5 SP1 Update Released</title><link>http://blogs.msdn.com/jimoneil/archive/2009/01/04/net-framework-3-5-sp1-update-released.aspx</link><pubDate>Sun, 04 Jan 2009 08:09:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9270946</guid><dc:creator>joneil</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jimoneil/comments/9270946.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimoneil/commentrss.aspx?PostID=9270946</wfw:commentRss><description>&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px 0px 10px 15px; border-left: 0px; border-bottom: 0px" height="118" alt="I got no bugs on me..." src="http://blogs.msdn.com/blogfiles/jimoneil/WindowsLiveWriter/.NETFramework3.5SP1UpdateReleased_233/bug2_6.gif" width="118" align="right" border="0"&gt; This is sort of 'last year's news' since the &lt;a href="http://support.microsoft.com/kb/959209"&gt;KB article&lt;/a&gt; for the update has a date of December 31st, but I suspect many of you weren't all that tuned in to patch releases over the holidays!&lt;/p&gt; &lt;p&gt;The update resolves a &lt;a href="http://support.microsoft.com/kb/958484/"&gt;number of issues&lt;/a&gt;, including some related to topics I've recently presented:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://asp.net/dynamicdata"&gt;ASP.NET Dynamic Data:&lt;/a&gt;&lt;/strong&gt;&amp;nbsp; In the 3.5 SP1 release, 1-to-1 relationships among entities in the Entity Framework were not supported.&amp;nbsp; There was a &lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16367"&gt;workaround&lt;/a&gt; posted for this which is now superseded by the &lt;a href="http://support.microsoft.com/kb/959209"&gt;SP1 update&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/data/bb931106.aspx"&gt;ADO.NET Data Services:&lt;/a&gt;&lt;/strong&gt; Since the ADO.NET Data Services Client did not support creating an entity &lt;strong&gt;and&lt;/strong&gt; setting a reference association (e.g., a foreign key column) &lt;em&gt;in the same step&lt;/em&gt;, you could not create new entities if the underlying database schema represented that relationship as a non-nullable foreign key.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9270946" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimoneil/archive/tags/Dynamic+Data/default.aspx">Dynamic Data</category><category domain="http://blogs.msdn.com/jimoneil/archive/tags/ADO.NET+Data+Services/default.aspx">ADO.NET Data Services</category></item></channel></rss>