<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Julie Lerman Blog</title>
    <link>http://www.thedatafarm.com/blog/</link>
    <description>Don't Be Iffy</description>
    <language>en-us</language>
    <copyright>Julie Lerman</copyright>
    <lastBuildDate>Fri, 09 May 2008 01:05:42 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>dasblog@thedatafarm.com</managingEditor>
    <webMaster>dasblog@thedatafarm.com</webMaster>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=79aaedfc-b2e3-4924-9104-1cfd0bd804f5</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,79aaedfc-b2e3-4924-9104-1cfd0bd804f5.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,79aaedfc-b2e3-4924-9104-1cfd0bd804f5.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=79aaedfc-b2e3-4924-9104-1cfd0bd804f5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have found myself explaining this in conference sessions so I thought I would write
it down in my blog.
</p>
        <p>
Entity Framework has a Golden Rule. Though shalt not do nuttin' that the developer
has not explicitly told you to do. The lack of implicit lazy loading is one of the
more notable (and hotly contested by some) example of this.
</p>
        <p>
But one day when I was coding, Entity Framework did something that I did not ask it
to do. I emailed <a href="http://www.thedatafarm.com/blog/ct.ashx?id=79aaedfc-b2e3-4924-9104-1cfd0bd804f5&amp;url=http%3a%2f%2fblogs.msdn.com%2fdsimmons">Danny
Simmons</a> to tattle on the API. But Danny explained something to me about RelationshipSpan
that needs to override the Golden Rule.
</p>
        <p>
I now call it the Platinum Rule. (I learned this pecking order from American Express).
</p>
        <p>
The Platinum Rule is that an object graph (for example when a customer is attached
to an order which is attached to some line items) must be completely in or completely
outside of the ObjectContext.
</p>
        <p>
The way I discovered it was that I had a Customer that was being change tracked by
an ObjectContext.
</p>
        <p>
I created a new order and attached the order to the customer.
</p>
        <p>
But I did NOT add or attach the order to the context.
</p>
        <p>
Yet, the order was suddenly within the context and being change tracked. Why? Because
of the Platinum rule. By attaching the order to the customer, I was creating a graph.
Since the graph can't have some of its objects in the context and some of its objects
out of the context, it has three options. 
</p>
        <ol>
          <li>
Don't allow the objects to be connected. (Now wouldn't that tick you off?) 
</li>
          <li>
Pull the customer out of the context. (Now wouldn't that <em>really</em> tick you
off?) 
</li>
          <li>
Pull the order INTO the context.</li>
        </ol>
        <p>
Okay, works for me.
</p>
        <p>
So this is the same rule that confuses people when they have an object graph that
is IN the context and they detach one of its objects. That object leaves the context
and "broken"off of the graph. So if you called context.Detach(Customer), then the
customer is detached but the Order and its Line Items are still in the context.
</p>
        <p>
You can no longer traverse from the Customer to the Order or from the Order to the
Customer.
</p>
        <p>
On the flip side, if you have an object graph that is not being change tracked 
- the whole package, Customer, the order and the details and they are all attached
to one another, if you attach any one of them to the context, the whole kit n' caboodle
gets pulled into the context - because of the platinum rule. 
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=79aaedfc-b2e3-4924-9104-1cfd0bd804f5" />
      </body>
      <title>Entity Framework's Golden Rule and its Platinum Rule</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,79aaedfc-b2e3-4924-9104-1cfd0bd804f5.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/05/09/EntityFrameworksGoldenRuleAndItsPlatinumRule.aspx</link>
      <pubDate>Fri, 09 May 2008 01:05:42 GMT</pubDate>
      <description>&lt;p&gt;
I have found myself explaining this in conference sessions so I thought I would write
it down in my blog.
&lt;/p&gt;
&lt;p&gt;
Entity Framework has a Golden Rule. Though shalt not do nuttin' that the developer
has not explicitly told you to do. The lack of implicit lazy loading is one of the
more notable (and hotly contested by some) example of this.
&lt;/p&gt;
&lt;p&gt;
But one day when I was coding, Entity Framework did something that I did not ask it
to do. I emailed &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=79aaedfc-b2e3-4924-9104-1cfd0bd804f5&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fdsimmons"&gt;Danny
Simmons&lt;/a&gt; to tattle on the API. But Danny explained something to me about RelationshipSpan
that needs to override the Golden Rule.
&lt;/p&gt;
&lt;p&gt;
I now call it the Platinum Rule. (I learned this pecking order from American Express).
&lt;/p&gt;
&lt;p&gt;
The Platinum Rule is that an object graph (for example when a customer is attached
to an order which is attached to some line items) must be completely in or completely
outside of the ObjectContext.
&lt;/p&gt;
&lt;p&gt;
The way I discovered it was that I had a Customer that was being change tracked by
an ObjectContext.
&lt;/p&gt;
&lt;p&gt;
I created a new order and attached the order to the customer.
&lt;/p&gt;
&lt;p&gt;
But I did NOT add or attach the order to the context.
&lt;/p&gt;
&lt;p&gt;
Yet, the order was suddenly within the context and being change tracked. Why? Because
of the Platinum rule. By attaching the order to the customer, I was creating a graph.
Since the graph can't have some of its objects in the context and some of its objects
out of the context, it has three options. 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Don't allow the objects to be connected. (Now wouldn't that tick you off?) 
&lt;li&gt;
Pull the customer out of the context. (Now wouldn't that &lt;em&gt;really&lt;/em&gt; tick you
off?) 
&lt;li&gt;
Pull the order INTO the context.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Okay, works for me.
&lt;/p&gt;
&lt;p&gt;
So this is the same rule that confuses people when they have an object graph that
is IN the context and they detach one of its objects. That object leaves the context
and "broken"off of the graph. So if you called context.Detach(Customer), then the
customer is detached but the Order and its Line Items are still in the context.
&lt;/p&gt;
&lt;p&gt;
You can no longer traverse from the Customer to the Order or from the Order to the
Customer.
&lt;/p&gt;
&lt;p&gt;
On the flip side, if you have an object graph that is not being change tracked&amp;nbsp;
- the whole package, Customer, the order and the details and they are all attached
to one another, if you attach any one of them to the context, the whole kit n' caboodle
gets pulled into the context - because of the platinum rule. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=79aaedfc-b2e3-4924-9104-1cfd0bd804f5" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,79aaedfc-b2e3-4924-9104-1cfd0bd804f5.aspx</comments>
      <category>Data Access</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=907bad1b-da18-4e09-84b7-69bfc8be38cf</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,907bad1b-da18-4e09-84b7-69bfc8be38cf.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,907bad1b-da18-4e09-84b7-69bfc8be38cf.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=907bad1b-da18-4e09-84b7-69bfc8be38cf</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Like Jeremy Miller, who has <a href="Transparent lazy loading in the Entity Framework.  If they want the Entity Framework to be usable in constructing rich Domain Models, they're going to have to do this.  " temp_href="Transparent lazy loading in the Entity Framework.  If they want the Entity Framework to be usable in constructing rich Domain Models, they're going to have to do this.  ">Transparent
Lazy Loading for Entity Framework on his Christmas Wish List</a>, Timothy Khouri does
not like the fact that Entity Framework doesn't support Lazy Loading. However, since
he really likes Entity Framework, he wrote some code that will enforce Lazy Loading
for him. Entity Framework promises not to do anything you don't explicitly tell it
to do, so Timothy found a way to keep telling EF to do this for him because that's
what he wants.
</p>
        <p>
After looking at LINQ to SQL's Lazy Loading and then bumping into Entity Framework's
explicit Deferred Loading, then sorting things out so he understood not only how the
two are different but why, he shares his lesson and his workaround in this article: <a href="http://www.thedatafarm.com/blog/ct.ashx?id=907bad1b-da18-4e09-84b7-69bfc8be38cf&amp;url=http%3a%2f%2fwww.singingeels.com%2fArticles%2fEntity_Framework_and_Lazy_Loading.aspx">Entity
Framework and Lazy Loading</a></p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=907bad1b-da18-4e09-84b7-69bfc8be38cf" />
      </body>
      <title>Another Domain Developer's view of Entity Framework and Lazy Loading</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,907bad1b-da18-4e09-84b7-69bfc8be38cf.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/05/09/AnotherDomainDevelopersViewOfEntityFrameworkAndLazyLoading.aspx</link>
      <pubDate>Fri, 09 May 2008 00:52:18 GMT</pubDate>
      <description>&lt;p&gt;
Like Jeremy Miller, who has &lt;a href="Transparent lazy loading in the Entity Framework.  If they want the Entity Framework to be usable in constructing rich Domain Models, they're going to have to do this.  " temp_href="Transparent lazy loading in the Entity Framework.  If they want the Entity Framework to be usable in constructing rich Domain Models, they're going to have to do this.  "&gt;Transparent
Lazy Loading for Entity Framework on his Christmas Wish List&lt;/a&gt;, Timothy Khouri does
not like the fact that Entity Framework doesn't support Lazy Loading. However, since
he really likes Entity Framework, he wrote some code that will enforce Lazy Loading
for him. Entity Framework promises not to do anything you don't explicitly tell it
to do, so Timothy found a way to keep telling EF to do this for him because that's
what he wants.
&lt;/p&gt;
&lt;p&gt;
After looking at LINQ to SQL's Lazy Loading and then bumping into Entity Framework's
explicit Deferred Loading, then sorting things out so he understood not only how the
two are different but why, he shares his lesson and his workaround in this article: &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=907bad1b-da18-4e09-84b7-69bfc8be38cf&amp;amp;url=http%3a%2f%2fwww.singingeels.com%2fArticles%2fEntity_Framework_and_Lazy_Loading.aspx"&gt;Entity
Framework and Lazy Loading&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=907bad1b-da18-4e09-84b7-69bfc8be38cf" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,907bad1b-da18-4e09-84b7-69bfc8be38cf.aspx</comments>
      <category>Data Access</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=39fe0aac-67ce-4cfd-9ac5-f49ef9d436a1</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,39fe0aac-67ce-4cfd-9ac5-f49ef9d436a1.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,39fe0aac-67ce-4cfd-9ac5-f49ef9d436a1.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=39fe0aac-67ce-4cfd-9ac5-f49ef9d436a1</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Pete left a valuable comment that the hyperlinks were much too subtle in my blog posts.
So I changed the link color to orange and its everywhere. It definitely stands out,
though I doubt I'll get a design award for it - just clashes a bit. Feel free to suggest
a different color if you want!
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=39fe0aac-67ce-4cfd-9ac5-f49ef9d436a1" />
      </body>
      <title>Eek! It's Orange! (My new hyperlinks)</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,39fe0aac-67ce-4cfd-9ac5-f49ef9d436a1.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/05/08/EekItsOrangeMyNewHyperlinks.aspx</link>
      <pubDate>Thu, 08 May 2008 12:10:18 GMT</pubDate>
      <description>&lt;p&gt;
Pete left a valuable comment that the hyperlinks were much too subtle in my blog posts.
So I changed the link color to orange and its everywhere. It definitely stands out,
though I doubt I'll get a design award for it - just clashes a bit. Feel free to suggest
a different color if you want!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=39fe0aac-67ce-4cfd-9ac5-f49ef9d436a1" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,39fe0aac-67ce-4cfd-9ac5-f49ef9d436a1.aspx</comments>
      <category>Blogging</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=5085489e-da84-4b0b-a69e-84cc9dc71e60</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,5085489e-da84-4b0b-a69e-84cc9dc71e60.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,5085489e-da84-4b0b-a69e-84cc9dc71e60.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5085489e-da84-4b0b-a69e-84cc9dc71e60</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Entity Data Models have a lot of rules. They are necessary for the integrity of the
model, though if you are not familiar with depth of EDMs and *why* these rules
exist, many of the mapping rules may seem to make no sense when it comes
trying to implement them. This gets hairy when you are mapping stored procedures.
Roger Jenning's solution is to <a href="http://www.thedatafarm.com/blog/ct.ashx?id=5085489e-da84-4b0b-a69e-84cc9dc71e60&amp;url=http%3a%2f%2foakleafblog.blogspot.com%2f2008%2f03%2fmigrating-to-stored-procedures-with-edm.html">create
stored procedures</a> that will map properly, rather than suffer wtih the ones that
already exist. 
</p>
        <p>
The first level of using Stored Procedures is that they work very easily
for existing entities that are simple, have no EntityReferences (these involve Foreign
Keys) , don't involve inheritance and map directly to a single table in your database.
</p>
        <p>
The next is stored procs that map nicely to entities which don't involve inheritance but
if your entities have any relationships, you will probably run into a wall with a
delete procedure. Here's why. 
</p>
        <p>
Stored Procs become Functions in the Entity Data Model. If you want to use these functions
rather than the dynamic SQL that Entity Framework will create, it's an all or nothing
scenario. You need to map an Insert, and Update and a Delete. (Read procs doesn't
come into play here). There are plenty of blog posts and other resources on how to
do this including this tutorial I wrote for the DataDeveloper.net site.
</p>
        <p>
If you have a relationship in your entity, you can map that easily enough to a foreign
key parameter in the function mappings and this makes sense with Inserts and Updates.
With deletes, generally you only have a primary key (eg ContactID) as the parameter
for the stored procedure. But here is where the EDM rules come in to play. A
foreign key value that is used in a stored proc, would in most cases map to the EntityKey
of a navigation property. 
</p>
        <p>
In other words, if you have a stored proc to insert SalesOrders, that procedure will
have a parameter for CustomerID. The Order Entity this is mapping to has a relationship
to the Customer entity and contains a Customer navigation property. The mapping therefore
would link the CustomerID paraemter to Order.Customer.CustomerID.
</p>
        <p>
By doing this, you are involving the association that exists between the Customer
entity and the Order entity.
</p>
        <p>
The EDM rule is that if you are involving an association in ONE of the function mappings,
you have to use it in ALL o the function mappings.
</p>
        <p>
Therefore a stored proc to delete an order, which only has an OrderID parameter will
need also to have a CustomerID parameter because you are required to map SOMETHING
to the Customer entity.
</p>
        <p>
This then breaks a possible rule. It means you need to go to the dba and beg them
to add this parameter into the stored procedure even though it doesn't get used.
</p>
        <p>
The alternative is to just go in and modify the SSDL to trick it into thinking that
that parameter exists which will make the model happy and the database won't care
at all. IT doesn't ever really get used.
</p>
        <p>
So if the actual stored proc is
</p>
        <p>
PROCEDURE DeleteOrder
</p>
        <p>
@OrderID int
</p>
        <p>
AS
</p>
        <p>
DELETE from ORDERS WHERE <a href="mailto:OrderID=@OrderID">OrderID=@OrderID</a></p>
        <p>
and the original function in SSDL is
</p>
        <p>
 &lt;Function Name="DeleteOrder" Aggregate="false" BuiltIn="false" NiladicFunction="false" 
<br />
            IsComposable="false"
ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo"&gt;<br />
     &lt;Parameter Name="OrderID" Type="int" Mode="In" /&gt;<br />
 &lt;/Function&gt;
</p>
        <p>
You just need to add a new parameter to the SSDL
</p>
        <p>
 &lt;Function Name="DeleteOrder" Aggregate="false" BuiltIn="false" NiladicFunction="false" 
<br />
            IsComposable="false"
ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo"&gt;<br />
     &lt;Parameter Name="OrderID" Type="int" Mode="In" /&gt;<br /><strong>     &lt;Parameter Name="CustomerID" Type="int" Mode="In"
/&gt;<br /></strong> &lt;/Function&gt;
</p>
        <p>
This is all fine and good until you need to update the model, because the SSDL will
lose all customizations.
</p>
        <p>
I keep my customizations listed in a separate text file so that if I must update the
model,  I can replace them.
</p>
        <p>
It's not pretty, but when I don't have a lot of customizations, I will choose this
over bugging the dba. Okay, in my world, I'm the DBA (how pathetic is that) but I'm
trying to think about enterprise developers and real DBAs.
</p>
        <p>
I started out wanting to write about dealing with stored procs for entities that
are inherited, but I guess that will have to come later!
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=5085489e-da84-4b0b-a69e-84cc9dc71e60" />
      </body>
      <title>Delete Stored Procs and Navigations in the Entity Data Model</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,5085489e-da84-4b0b-a69e-84cc9dc71e60.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/05/07/DeleteStoredProcsAndNavigationsInTheEntityDataModel.aspx</link>
      <pubDate>Wed, 07 May 2008 18:33:03 GMT</pubDate>
      <description>&lt;p&gt;
Entity Data Models have a lot of rules. They are necessary for the integrity of the
model, though if you are not familiar with depth of&amp;nbsp;EDMs and *why* these rules
exist,&amp;nbsp;many of the mapping rules may&amp;nbsp;seem to make no sense when it comes
trying to implement&amp;nbsp;them. This gets hairy when you are mapping stored procedures.
Roger Jenning's solution is to &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=5085489e-da84-4b0b-a69e-84cc9dc71e60&amp;amp;url=http%3a%2f%2foakleafblog.blogspot.com%2f2008%2f03%2fmigrating-to-stored-procedures-with-edm.html"&gt;create
stored procedures&lt;/a&gt; that will map properly, rather than suffer wtih the ones that
already exist. 
&lt;/p&gt;
&lt;p&gt;
The first&amp;nbsp;level of using&amp;nbsp;Stored Procedures is that they work very easily
for existing entities that are simple, have no EntityReferences (these involve Foreign
Keys) , don't involve inheritance and map directly to a single table in your database.
&lt;/p&gt;
&lt;p&gt;
The next is stored procs that map nicely to entities which don't involve inheritance&amp;nbsp;but
if your entities have any relationships, you will probably run into a wall with a
delete procedure. Here's why. 
&lt;/p&gt;
&lt;p&gt;
Stored Procs become Functions in the Entity Data Model. If you want to use these functions
rather than the dynamic SQL that Entity Framework will create, it's an all or nothing
scenario. You need to map an Insert, and Update and a Delete. (Read procs&amp;nbsp;doesn't
come into play here). There are plenty of blog posts and other resources on how to
do this including&amp;nbsp;this tutorial I wrote for the DataDeveloper.net site.
&lt;/p&gt;
&lt;p&gt;
If you have a relationship in your entity, you can map that easily enough to a foreign
key parameter in the function mappings and this makes sense with Inserts and Updates.
With deletes, generally you only have a primary key (eg ContactID) as the parameter
for the stored procedure. But here is where the EDM rules come in to play.&amp;nbsp;A
foreign key value that is used in a stored proc, would in most cases map to the EntityKey
of a&amp;nbsp;navigation property. 
&lt;/p&gt;
&lt;p&gt;
In other words, if you have a stored proc to insert SalesOrders, that procedure will
have a parameter for CustomerID. The Order Entity this is mapping to has a relationship
to the Customer entity and contains a Customer navigation property. The mapping therefore
would link the CustomerID paraemter to Order.Customer.CustomerID.
&lt;/p&gt;
&lt;p&gt;
By doing this, you are involving the association that exists between the Customer
entity and the Order entity.
&lt;/p&gt;
&lt;p&gt;
The EDM rule is that if you are involving an association in ONE of the function mappings,
you have to use it in ALL o the function mappings.
&lt;/p&gt;
&lt;p&gt;
Therefore a stored proc to delete an order, which only has an OrderID parameter will
need also to have a CustomerID parameter because you are required to map SOMETHING
to the Customer entity.
&lt;/p&gt;
&lt;p&gt;
This then breaks a possible rule. It means you need to go to the dba and beg them
to add this parameter into the stored procedure even though it doesn't get used.
&lt;/p&gt;
&lt;p&gt;
The alternative is to just go in and modify the SSDL to trick it into thinking that
that parameter exists which will make the model happy and the database won't care
at all. IT doesn't ever really get used.
&lt;/p&gt;
&lt;p&gt;
So if the actual stored proc is
&lt;/p&gt;
&lt;p&gt;
PROCEDURE DeleteOrder
&lt;/p&gt;
&lt;p&gt;
@OrderID int
&lt;/p&gt;
&lt;p&gt;
AS
&lt;/p&gt;
&lt;p&gt;
DELETE from ORDERS WHERE &lt;a href="mailto:OrderID=@OrderID"&gt;OrderID=@OrderID&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
and the original function in SSDL is
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;lt;Function Name="DeleteOrder" Aggregate="false" BuiltIn="false" NiladicFunction="false" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IsComposable="false"
ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Parameter Name="OrderID" Type="int" Mode="In" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;/Function&amp;gt;
&lt;/p&gt;
&lt;p&gt;
You just need to add a new parameter to the SSDL
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;lt;Function Name="DeleteOrder" Aggregate="false" BuiltIn="false" NiladicFunction="false" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IsComposable="false"
ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Parameter Name="OrderID" Type="int" Mode="In" /&amp;gt;&lt;br&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Parameter Name="CustomerID" Type="int" Mode="In"
/&amp;gt;&lt;br&gt;
&lt;/strong&gt;&amp;nbsp;&amp;lt;/Function&amp;gt;
&lt;/p&gt;
&lt;p&gt;
This is all fine and good until you need to update the model, because the SSDL will
lose all customizations.
&lt;/p&gt;
&lt;p&gt;
I keep my customizations listed in a separate text file so that if I must update the
model,&amp;nbsp; I can replace them.
&lt;/p&gt;
&lt;p&gt;
It's not pretty, but when I don't have a lot of customizations, I will choose this
over bugging the dba. Okay, in my world, I'm the DBA (how pathetic is that) but I'm
trying to think about enterprise developers and real DBAs.
&lt;/p&gt;
&lt;p&gt;
I started out wanting to write about dealing with stored procs for&amp;nbsp;entities that
are inherited, but I guess that will have to come later!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=5085489e-da84-4b0b-a69e-84cc9dc71e60" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,5085489e-da84-4b0b-a69e-84cc9dc71e60.aspx</comments>
      <category>Data Access</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=04d46dc4-69ec-4e57-b719-d98dd6b24520</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,04d46dc4-69ec-4e57-b719-d98dd6b24520.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,04d46dc4-69ec-4e57-b719-d98dd6b24520.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=04d46dc4-69ec-4e57-b719-d98dd6b24520</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was perusing <a href="http://www.thedatafarm.com/blog/ct.ashx?id=04d46dc4-69ec-4e57-b719-d98dd6b24520&amp;url=http%3a%2f%2fgeekswithblogs.net%2fcwilliams%2fDefault.aspx">Chris
Williams' blog </a>over on GeekswithBlogs.Net. I met Chris many years ago through
INETA and in person at an INETA User Group Leader event. Chris ran the user group
in Charleston, South Carolina and has since moved to Minnesota where he has survived
his first winter with all of his fingers and toes intact. He is a really nice, unique
and memorable guy (okay the tat's definitely help him stand out).
</p>
        <p>
While looking at his blog, I saw a <a href="http://www.thedatafarm.com/blog/ct.ashx?id=04d46dc4-69ec-4e57-b719-d98dd6b24520&amp;url=http%3a%2f%2fgeekswithblogs.net%2fcwilliams%2farchive%2f2008%2f04%2f28%2f121733.aspx">post
of photos from</a> a funny ad that apparentlyly reminded Chris of D'Arcy
Lussier, a a wild and crazy guy (also a <a href="http://www.thedatafarm.com/blog/ct.ashx?id=04d46dc4-69ec-4e57-b719-d98dd6b24520&amp;url=http%3a%2f%2fgeekswithblogs.net%2fdlussier%2fDefault.aspx">GeekswithBlogs
blogger</a>) who lives in Winnipeg (where I think you need to be a little wild and
crazy to survive), and probably laughs at Chris' mumblings about the cold weather
in Minnesota. D'Arcy also is a user group leader and I see him frequently at the DevTeach
events in Montreal and look forward to seeing him at <a href="http://www.thedatafarm.com/blog/ct.ashx?id=04d46dc4-69ec-4e57-b719-d98dd6b24520&amp;url=http%3a%2f%2fwww.devteach.com">DevTeach</a> next
week in Toronto where I plan to goad him into a his own Meatloaf imitation. (I didn't
realize that the dad in the commercial really is Meatloaf!)
</p>
        <p>
What struck me when I saw the photos and Chris' comments about them was that here
are two guys who have a lot in common and are clearly good friends who may never have
met if it weren't for INETA and the .NET blogging community. I know it may seem
obvious that of course they would find each other, but it's not a given. These resources
were only just starting up 6 years ago, so they are relatively new.
</p>
        <p>
It really made me stop and think when I saw that blog post and made me happy and very
proud of the community that we have all created.
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=04d46dc4-69ec-4e57-b719-d98dd6b24520" />
      </body>
      <title>Our .NET Community</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,04d46dc4-69ec-4e57-b719-d98dd6b24520.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/05/07/OurNETCommunity.aspx</link>
      <pubDate>Wed, 07 May 2008 13:10:13 GMT</pubDate>
      <description>&lt;p&gt;
I was perusing &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=04d46dc4-69ec-4e57-b719-d98dd6b24520&amp;amp;url=http%3a%2f%2fgeekswithblogs.net%2fcwilliams%2fDefault.aspx"&gt;Chris
Williams' blog &lt;/a&gt;over on GeekswithBlogs.Net. I met Chris many years ago through
INETA and in person at an INETA User Group Leader event. Chris ran the user group
in Charleston, South Carolina and has since moved to Minnesota where he has survived
his first winter with all of his fingers and toes intact. He is a really nice, unique
and memorable guy (okay the tat's definitely help him stand out).
&lt;/p&gt;
&lt;p&gt;
While looking at his blog, I saw a &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=04d46dc4-69ec-4e57-b719-d98dd6b24520&amp;amp;url=http%3a%2f%2fgeekswithblogs.net%2fcwilliams%2farchive%2f2008%2f04%2f28%2f121733.aspx"&gt;post
of photos from&lt;/a&gt;&amp;nbsp;a funny ad that apparentlyly reminded Chris of&amp;nbsp;D'Arcy
Lussier,&amp;nbsp;a a wild and crazy guy (also a &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=04d46dc4-69ec-4e57-b719-d98dd6b24520&amp;amp;url=http%3a%2f%2fgeekswithblogs.net%2fdlussier%2fDefault.aspx"&gt;GeekswithBlogs
blogger&lt;/a&gt;) who lives in Winnipeg (where I think you need to be a little wild and
crazy to survive), and probably laughs at Chris' mumblings about the cold weather
in Minnesota. D'Arcy also is a user group leader and I see him frequently at the DevTeach
events in Montreal and look forward to seeing him at &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=04d46dc4-69ec-4e57-b719-d98dd6b24520&amp;amp;url=http%3a%2f%2fwww.devteach.com"&gt;DevTeach&lt;/a&gt; next
week in Toronto where I plan to goad him into a his own Meatloaf imitation. (I didn't
realize that the dad in the commercial really is Meatloaf!)
&lt;/p&gt;
&lt;p&gt;
What struck me when I saw the photos and Chris' comments about them was that here
are two guys who have a lot in common and are clearly good friends who may never have
met if it weren't for INETA and&amp;nbsp;the .NET blogging community. I know it may seem
obvious that of course they would find each other, but it's not a given. These resources
were only just starting up 6 years ago, so they are relatively new.
&lt;/p&gt;
&lt;p&gt;
It really made me stop and think when I saw that blog post and made me happy and very
proud of the community that we have all created.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=04d46dc4-69ec-4e57-b719-d98dd6b24520" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,04d46dc4-69ec-4e57-b719-d98dd6b24520.aspx</comments>
      <category>INETA</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=d8212240-ebc1-420b-8277-19be79ea48ba</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,d8212240-ebc1-420b-8277-19be79ea48ba.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,d8212240-ebc1-420b-8277-19be79ea48ba.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d8212240-ebc1-420b-8277-19be79ea48ba</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
And I haven't even had a chance to look at any presentations yet.
</p>
        <p>
Here's what's on my schedule so far.
</p>
        <ul>
          <li>
Monday morning - speaker training 
</li>
          <li>
Monday afternoon - INETA User Group Leader Meeting (yay!) 
</li>
          <li>
Monday evening - Speaker dinner 
</li>
          <li>
Tuesday 1-2: Vista Ask the Experts Booth demoing Annotation in Silverlight 
</li>
          <li>
Wednesday Lunch: Women in IT Panel (yay) 
</li>
          <li>
Wednesday 2:45: Birds of Feather "Is Entity Framework right for your application?" 
</li>
          <li>
Wednesday 7pm: Birds of Feather with Steve Smith: "Going Solo"</li>
        </ul>
        <p>
(and the real reason I'm going)
</p>
        <ul>
          <li>
            <font color="#000080">
              <strong>Thursday 10:15 - 11:30 am  Advanced Entity Framework:
Take Charge of Object Services </strong>
            </font>
          </li>
          <li>
            <font color="#000080">
              <strong>Thursday 2:45 - 4:00pm <font face="Arial">Microsoft
.NET Framework 3.5 Data Access Guidance</font></strong>
            </font>
          </li>
        </ul>
        <p>
          <font face="Arial">And then as soon as I finish my session I have to run to the airport
to catch a 6:45 flight. (and miss the attendee party, duh)</font>
        </p>
        <p>
          <font face="Arial">So this is starting to look like one of the conferences where I
don't get to go to sessions. Because all of the rest of the time, I'll need to be
in a quiet place practicing my sessions and writing my book!</font>
        </p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=d8212240-ebc1-420b-8277-19be79ea48ba" />
      </body>
      <title>TechEd Schedule is filling up</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,d8212240-ebc1-420b-8277-19be79ea48ba.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/05/07/TechEdScheduleIsFillingUp.aspx</link>
      <pubDate>Wed, 07 May 2008 01:54:17 GMT</pubDate>
      <description>&lt;p&gt;
And I haven't even had a chance to look at any presentations yet.
&lt;/p&gt;
&lt;p&gt;
Here's what's on my schedule so far.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Monday morning - speaker training 
&lt;li&gt;
Monday afternoon - INETA User Group Leader Meeting (yay!) 
&lt;li&gt;
Monday evening - Speaker dinner 
&lt;li&gt;
Tuesday 1-2: Vista Ask the Experts Booth demoing Annotation in Silverlight 
&lt;li&gt;
Wednesday Lunch: Women in IT Panel (yay) 
&lt;li&gt;
Wednesday 2:45: Birds of Feather "Is Entity Framework right for your application?" 
&lt;li&gt;
Wednesday 7pm: Birds of Feather with Steve Smith: "Going Solo"&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
(and the real reason I'm going)
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font color=#000080&gt;&lt;strong&gt;Thursday 10:15 - 11:30 am&amp;nbsp; Advanced Entity Framework:
Take Charge of Object Services &lt;/strong&gt;&lt;/font&gt; 
&lt;li&gt;
&lt;font color=#000080&gt;&lt;strong&gt;Thursday 2:45 - 4:00pm &lt;font face=Arial&gt;Microsoft .NET
Framework 3.5 Data Access Guidance&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;font face=Arial&gt;And then as soon as I finish my session I have to run to the airport
to catch a 6:45 flight. (and miss the attendee party, duh)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Arial&gt;So this is starting to look like one of the conferences where I don't
get to go to sessions. Because all of the rest of the time, I'll need to be in a quiet
place practicing my sessions and writing my book!&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=d8212240-ebc1-420b-8277-19be79ea48ba" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,d8212240-ebc1-420b-8277-19be79ea48ba.aspx</comments>
      <category>TechEd</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=abec7714-7aea-445b-af90-e25a38837afb</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,abec7714-7aea-445b-af90-e25a38837afb.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,abec7714-7aea-445b-af90-e25a38837afb.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=abec7714-7aea-445b-af90-e25a38837afb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Don't pencil it in; ink it in!
</p>
        <p>
May 22nd at Vermont Technical College in Williston from 9am to 4pm.
</p>
        <p>
You may notice that May 22nd is on a THursday. I will put money on the fact that Chris
scheduled this so that he can go to <a href="http://www.thedatafarm.com/blog/ct.ashx?id=abec7714-7aea-445b-af90-e25a38837afb&amp;url=http%3a%2f%2fwww.boves.com">Bove's</a>.
THe last few times he hit town at the beginning of the week, but Bove's is closed
on Sundays and Mondays and I think I heard the sobs all the way down here in Huntington.
Thankfully, he discovered <a href="http://www.thedatafarm.com/blog/ct.ashx?id=abec7714-7aea-445b-af90-e25a38837afb&amp;url=http%3a%2f%2fwww.skinnypancake.com%2f">The
Skinny Pancake</a> down by the water front and is now a fan of that resto, too!
</p>
        <p>
Read more details about the roadshow on <a href="http://www.thedatafarm.com/blog/ct.ashx?id=abec7714-7aea-445b-af90-e25a38837afb&amp;url=http%3a%2f%2fblogs.msdn.com%2fcbowen%2farchive%2f2008%2f05%2f02%2fthe-roadshow-rides-again-may-june-edition.aspx">Chris'
blog!</a></p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=abec7714-7aea-445b-af90-e25a38837afb" />
      </body>
      <title>The Bob &amp; Chris (and now Jim, too) Roadshow returns to Burlington May 22 </title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,abec7714-7aea-445b-af90-e25a38837afb.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/05/06/TheBobChrisAndNowJimTooRoadshowReturnsToBurlingtonMay22.aspx</link>
      <pubDate>Tue, 06 May 2008 15:25:05 GMT</pubDate>
      <description>&lt;p&gt;
Don't pencil it in; ink it in!
&lt;/p&gt;
&lt;p&gt;
May 22nd at Vermont Technical College in Williston from 9am to 4pm.
&lt;/p&gt;
&lt;p&gt;
You may notice that May 22nd is on a THursday. I will put money on the fact that Chris
scheduled this so that he can go to &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=abec7714-7aea-445b-af90-e25a38837afb&amp;amp;url=http%3a%2f%2fwww.boves.com"&gt;Bove's&lt;/a&gt;.
THe last few times he hit town at the beginning of the week, but Bove's is closed
on Sundays and Mondays and I think I heard the sobs all the way down here in Huntington.
Thankfully, he discovered &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=abec7714-7aea-445b-af90-e25a38837afb&amp;amp;url=http%3a%2f%2fwww.skinnypancake.com%2f"&gt;The
Skinny Pancake&lt;/a&gt; down by the water front and is now a fan of that resto, too!
&lt;/p&gt;
&lt;p&gt;
Read more details about the roadshow on &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=abec7714-7aea-445b-af90-e25a38837afb&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fcbowen%2farchive%2f2008%2f05%2f02%2fthe-roadshow-rides-again-may-june-edition.aspx"&gt;Chris'
blog!&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=abec7714-7aea-445b-af90-e25a38837afb" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,abec7714-7aea-445b-af90-e25a38837afb.aspx</comments>
      <category>VTdotNETFeed</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=02240919-4e3b-4c4f-b14c-a4a645d33ddb</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,02240919-4e3b-4c4f-b14c-a4a645d33ddb.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,02240919-4e3b-4c4f-b14c-a4a645d33ddb.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=02240919-4e3b-4c4f-b14c-a4a645d33ddb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It was pointed out to me recently that I've gotten a bit lazy with my coding. I completely
blame it on implicitly typed local variables. <a href="http://www.thedatafarm.com/blog/ct.ashx?id=02240919-4e3b-4c4f-b14c-a4a645d33ddb&amp;url=http%3a%2f%2fblogs.devsource.com%2fdevlife%2fcontent%2fnet_general%2fhow_visual_studio_2008_made_me_even_lazier.html">Read
more here...</a></p>
        <p>
[A New <a href="http://www.thedatafarm.com/blog/ct.ashx?id=02240919-4e3b-4c4f-b14c-a4a645d33ddb&amp;url=http%3a%2f%2fblogs.devsource.com%2fdevlife">DevLife</a> Post]
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=02240919-4e3b-4c4f-b14c-a4a645d33ddb" />
      </body>
      <title>How Visual Studio 2008 Made me even lazier</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,02240919-4e3b-4c4f-b14c-a4a645d33ddb.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/05/06/HowVisualStudio2008MadeMeEvenLazier.aspx</link>
      <pubDate>Tue, 06 May 2008 15:21:49 GMT</pubDate>
      <description>&lt;p&gt;
It was pointed out to me recently that I've gotten a bit lazy with my coding. I completely
blame it on implicitly typed local variables. &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=02240919-4e3b-4c4f-b14c-a4a645d33ddb&amp;amp;url=http%3a%2f%2fblogs.devsource.com%2fdevlife%2fcontent%2fnet_general%2fhow_visual_studio_2008_made_me_even_lazier.html"&gt;Read
more here...&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
[A New &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=02240919-4e3b-4c4f-b14c-a4a645d33ddb&amp;amp;url=http%3a%2f%2fblogs.devsource.com%2fdevlife"&gt;DevLife&lt;/a&gt; Post]
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=02240919-4e3b-4c4f-b14c-a4a645d33ddb" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,02240919-4e3b-4c4f-b14c-a4a645d33ddb.aspx</comments>
      <category>dotNET</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=49ca977d-b293-4cb4-b195-f3fc7b624e38</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,49ca977d-b293-4cb4-b195-f3fc7b624e38.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,49ca977d-b293-4cb4-b195-f3fc7b624e38.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=49ca977d-b293-4cb4-b195-f3fc7b624e38</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
 
</p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520002%2520(Custom)_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="spring 002 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20002%20(Custom)_thumb.jpg" width="404" border="0" />
          </a>
        </p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520003%2520(Custom)_4.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="185" alt="spring 003 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20003%20(Custom)_thumb_1.jpg" width="404" border="0" />
          </a>
        </p>
        <p>
Veggie garden's ready in case I ever get ready. I did already put some lettuce and
peas in on the left. 
<br />
Only super hardy stuff goes in now. We can't do our regular planting (tomatoes etc)
until after Memorial Day. 
<br />
Short growing season in Vermont.
</p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520004%2520(Custom)_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="spring 004 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20004%20(Custom)_thumb.jpg" width="404" border="0" />
          </a>
        </p>
        <p>
Compost is ready and waiting.
</p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520005%2520(Custom)_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="spring 005 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20005%20(Custom)_thumb.jpg" width="404" border="0" />
          </a>
        </p>
        <p>
Lupine are coming up. They are SO hardy.There are hundreds of them in the front field.
Looks amazing in early June!
</p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520006%2520(Custom)_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="spring 006 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20006%20(Custom)_thumb.jpg" width="404" border="0" />
          </a>
        </p>
        <p>
The front garden has already got blooms in it and everything else is growing like
mad.  
</p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520007%2520(Custom)_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="470" alt="spring 007 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20007%20(Custom)_thumb.jpg" width="404" border="0" />
          </a>
        </p>
        <p>
And the winner is.... the first tulip opened today.
</p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520008%2520(Custom)_4.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="377" alt="spring 008 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20008%20(Custom)_thumb_1.jpg" width="404" border="0" />
          </a>
        </p>
        <p>
Columbine will be in bloom in another month. They spread on their own so there's a
bunch of this.
</p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520009_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="336" alt="spring 009" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20009_thumb.jpg" width="404" border="0" />
          </a>
        </p>
        <p>
This lilac is making flowers for the first time this year. It's neighbor is still
flowerless. Maybe next year.
</p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520010_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="181" alt="spring 010" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20010_thumb.jpg" width="504" border="0" />
          </a>
        </p>
        <p>
Lots of Lilies. There are also miles of bee balm along this fence as well as berries
and lupine and a very hardy delphinium.
</p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520011%2520(Custom)_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="spring 011 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20011%20(Custom)_thumb.jpg" width="364" border="0" />
          </a>
        </p>
        <p>
Is this bucolic enough? I love this ancient Maple tree down by our mailbox.
</p>
        <p>
But best of all, my favorite flowers are STILL here
</p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2ftasha%2520may%25202008_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="tasha may 2008" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/tasha%20may%202008_thumb.jpg" width="470" border="0" />
          </a>
        </p>
        <p>
Tasha, now 14 1/2 which is insanely old for a Newfie.
</p>
        <p>
          <a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520017%2520(Custom)_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="spring 017 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20017%20(Custom)_thumb.jpg" width="404" border="0" />
          </a>
        </p>
        <p>
And Daisy, the puppy in the house. She's 13 1/2.
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38" />
      </body>
      <title>Spring Diary!</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,49ca977d-b293-4cb4-b195-f3fc7b624e38.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/05/05/SpringDiary.aspx</link>
      <pubDate>Mon, 05 May 2008 18:19:00 GMT</pubDate>
      <description>&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520002%2520(Custom)_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="spring 002 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20002%20(Custom)_thumb.jpg" width="404" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520003%2520(Custom)_4.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="185" alt="spring 003 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20003%20(Custom)_thumb_1.jpg" width="404" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Veggie garden's ready in case I ever get ready. I did already put some lettuce and
peas in on the left. 
&lt;br /&gt;
Only super hardy stuff goes in now. We can't do our regular planting (tomatoes etc)
until after Memorial Day. 
&lt;br /&gt;
Short growing season in Vermont.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520004%2520(Custom)_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="spring 004 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20004%20(Custom)_thumb.jpg" width="404" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Compost is ready and waiting.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520005%2520(Custom)_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="spring 005 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20005%20(Custom)_thumb.jpg" width="404" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Lupine are coming up. They are SO hardy.There are hundreds of them in the front field.
Looks amazing in early June!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520006%2520(Custom)_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="spring 006 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20006%20(Custom)_thumb.jpg" width="404" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The front garden has already got blooms in it and everything else is growing like
mad.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520007%2520(Custom)_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="470" alt="spring 007 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20007%20(Custom)_thumb.jpg" width="404" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
And the winner is.... the first tulip opened today.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520008%2520(Custom)_4.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="377" alt="spring 008 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20008%20(Custom)_thumb_1.jpg" width="404" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Columbine will be in bloom in another month. They spread on their own so there's a
bunch of this.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520009_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="336" alt="spring 009" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20009_thumb.jpg" width="404" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
This lilac is making flowers for the first time this year. It's neighbor is still
flowerless. Maybe next year.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520010_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="181" alt="spring 010" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20010_thumb.jpg" width="504" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Lots of Lilies. There are also miles of bee balm along this fence as well as berries
and lupine and a very hardy delphinium.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520011%2520(Custom)_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="spring 011 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20011%20(Custom)_thumb.jpg" width="364" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Is this bucolic enough? I love this ancient Maple tree down by our mailbox.
&lt;/p&gt;
&lt;p&gt;
But best of all, my favorite flowers are STILL here
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2ftasha%2520may%25202008_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="tasha may 2008" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/tasha%20may%202008_thumb.jpg" width="470" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Tasha, now 14 1/2 which is insanely old for a Newfie.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38&amp;amp;url=http%3a%2f%2fwww.thedatafarm.com%2fblog%2fcontent%2fbinary%2fWindowsLiveWriter%2fSpringDiary_C964%2fspring%2520017%2520(Custom)_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="304" alt="spring 017 (Custom)" src="http://www.thedatafarm.com/blog/content/binary/WindowsLiveWriter/SpringDiary_C964/spring%20017%20(Custom)_thumb.jpg" width="404" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
And Daisy, the puppy in the house. She's 13 1/2.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=49ca977d-b293-4cb4-b195-f3fc7b624e38" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,49ca977d-b293-4cb4-b195-f3fc7b624e38.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=fb8ddf5c-41a7-473e-aa39-e4d71082f1a1</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,fb8ddf5c-41a7-473e-aa39-e4d71082f1a1.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,fb8ddf5c-41a7-473e-aa39-e4d71082f1a1.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fb8ddf5c-41a7-473e-aa39-e4d71082f1a1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am thrilled to share this fabulous news ... <a href="http://www.thedatafarm.com/blog/ct.ashx?id=fb8ddf5c-41a7-473e-aa39-e4d71082f1a1&amp;url=http%3a%2f%2fwww.ineta.org%2fDefault.aspx">INETA
Noram has a new website</a>. The reason for my jubilation is that for a variety of
reasons, INETA has been trying to create a new website for about 4 years, so to see
it actually happen is wonderful.
</p>
        <p>
This may have <em>just</em> launched because I hadn't heard anything about it yet
or maybe I overlooked it in the last newsletter.
</p>
        <p>
Not only does it have a new look but it has some long awaited features such as an
integrated map to find user groups. They have partnered with Component Source so you
can buy .NET components right from the site.
</p>
        <p>
I also found the <a href="http://www.thedatafarm.com/blog/ct.ashx?id=fb8ddf5c-41a7-473e-aa39-e4d71082f1a1&amp;url=http%3a%2f%2flive.ineta.org%2f">live.ineta.org</a> website
that I didn't know about. It has videos (user group YouTube?), a blog that lists
things like upcoming code camps and INETA related events and some other resources. 
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=fb8ddf5c-41a7-473e-aa39-e4d71082f1a1" />
      </body>
      <title>INETA NORAM'S new website and the INETA Live blog</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,fb8ddf5c-41a7-473e-aa39-e4d71082f1a1.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/05/01/INETANORAMSNewWebsiteAndTheINETALiveBlog.aspx</link>
      <pubDate>Thu, 01 May 2008 15:18:25 GMT</pubDate>
      <description>&lt;p&gt;
I am thrilled to share this fabulous news&amp;nbsp;... &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=fb8ddf5c-41a7-473e-aa39-e4d71082f1a1&amp;amp;url=http%3a%2f%2fwww.ineta.org%2fDefault.aspx"&gt;INETA
Noram has a new website&lt;/a&gt;. The reason for my jubilation is that for a variety of
reasons, INETA has been trying to create a new website for about 4 years, so to see
it actually happen is wonderful.
&lt;/p&gt;
&lt;p&gt;
This may have &lt;em&gt;just&lt;/em&gt; launched because I hadn't heard anything about it yet
or maybe I overlooked it in the last newsletter.
&lt;/p&gt;
&lt;p&gt;
Not only does it have a new look but it has some long awaited features such as an
integrated map to find user groups. They have partnered with Component Source so you
can buy .NET components right from the site.
&lt;/p&gt;
&lt;p&gt;
I also found the &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=fb8ddf5c-41a7-473e-aa39-e4d71082f1a1&amp;amp;url=http%3a%2f%2flive.ineta.org%2f"&gt;live.ineta.org&lt;/a&gt; website
that I didn't know about. It has videos (user group YouTube?),&amp;nbsp;a blog that lists
things like upcoming code camps and INETA related events and some other resources.&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=fb8ddf5c-41a7-473e-aa39-e4d71082f1a1" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,fb8ddf5c-41a7-473e-aa39-e4d71082f1a1.aspx</comments>
      <category>INETA</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=4e628659-d16a-4c45-ba09-dad8bc7ae4c3</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,4e628659-d16a-4c45-ba09-dad8bc7ae4c3.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,4e628659-d16a-4c45-ba09-dad8bc7ae4c3.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4e628659-d16a-4c45-ba09-dad8bc7ae4c3</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This week I had to make a very difficult decision. It will make you laugh, but really,
it was hard.
</p>
        <p>
I had to decide if my book will say "Julie Lerman" or "Julia Lerman". 
</p>
        <p>
After a LOT of deliberation, I decided to go with my grown up name: Julia Lerman.
Which means that any searching on Amazon or whereever for "that book by Julie Lerman"
won't find it.
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=4e628659-d16a-4c45-ba09-dad8bc7ae4c3" />
      </body>
      <title>What's in a name?</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,4e628659-d16a-4c45-ba09-dad8bc7ae4c3.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/05/01/WhatsInAName.aspx</link>
      <pubDate>Thu, 01 May 2008 01:36:36 GMT</pubDate>
      <description>&lt;p&gt;
This week I had to make a very difficult decision. It will make you laugh, but really,
it was hard.
&lt;/p&gt;
&lt;p&gt;
I had to decide if my book will say "Julie Lerman" or "Julia Lerman". 
&lt;/p&gt;
&lt;p&gt;
After a LOT of deliberation, I decided to go with my grown up name: Julia Lerman.
Which means that any searching on Amazon or whereever for "that book by Julie Lerman"
won't find it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=4e628659-d16a-4c45-ba09-dad8bc7ae4c3" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,4e628659-d16a-4c45-ba09-dad8bc7ae4c3.aspx</comments>
      <category>Book</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=01278c8e-c86d-490f-93a0-1d72344de429</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,01278c8e-c86d-490f-93a0-1d72344de429.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,01278c8e-c86d-490f-93a0-1d72344de429.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=01278c8e-c86d-490f-93a0-1d72344de429</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
EntityStateObjects, to me, are one of the most important little pieces of the EF puzzle.
IT is the EntityStateObject that maintains all of the critical info for change tracking.
But it's hard to get the big picture of what's going on in there when debugging because
all of the important stuff is delivered through methods, not properties.
</p>
        <p>
I wanted so badly to write a debugger visualizer for them but they are not serializable
(big pout) so instead, I wrote an extension method that uses a ConditionalAttribute
to ensure it doesn't pop up during run time. It's for my book but I didn't want to
hold onto it until October when the book should be published.
</p>
        <p>
Since it's not a Debugger Visualiser, I refer to it as a DebugTime visualizer. <img alt=":-)" src="smilies/happy.gif" /></p>
        <p>
Here's what my ObjectStateEntry Visualizer looks like in action:
</p>
        <p>
          <img src="http://www.thedatafarm.com/blog/content/binary/osevisualizer.png" border="0" />
        </p>
        <p>
All of the info is pulled from the ObjectStateEntry. At the top it tells the fully
qualified name of the type of the object being inspected as well as the object's EntityState.
</p>
        <p>
Then I use the various methods of the ObjectStateENtry to get the Original Values,
the Current Values, the names of the fields and a list of the names of the modified
fields.
</p>
        <p>
All of this data I feed into the grid.
</p>
        <p>
If the object is detached, then there is no ObjectStateEntry and the visualizer shows
this message when you try to run it:
</p>
        <p>
          <img src="http://www.thedatafarm.com/blog/content/binary/osevisualizererror.png" border="0" />
        </p>
        <p>
So enough with the screenshots. Here's the code. And here's a collection of important
punctuations for you C# programmers who feel a need to translate
</p>
        <p>
[ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;  ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;  ; ; ; ; ; ; ; ; ; ; ; ; ; ;]
</p>
        <p>
 
</p>
        <pre>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Imports</span> System.Runtime.CompilerServices <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Imports</span> System.Data.Objects <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'NOTE:
The objects in use here are not serializable so they can't be used</span><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'in
debugger visualizers. Instead, you'll need to use them directly, but you can </span><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">'give
them a debug attribute so they are only available during debug mode.</span> &lt;Extension()&gt;
_ <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Module</span> Visualizers
&lt;ConditionalAttribute(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"DEBUG"</span>)&gt;
_ &lt;Extension()&gt; _ <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Public</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span> VisualizeObjectStateEntry(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> eKey <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> EntityKey, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ByVal</span> context <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> ObjectContext) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> ose <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span> ObjectStateEntry <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Nothing</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">If</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Not</span> context.ObjectStateManager.TryGetObjectStateEntry(eKey,
ose) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Then</span> Windows.Forms.MessageBox.Show(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Object
is not currently being change tracked and no ObjectStateEntry exists."</span>, _<br /></span>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"ObjectStateEntry
Visualizer"</span>, Windows.Forms.MessageBoxButtons.OK, Windows.Forms.MessageBoxIcon.Warning) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Else</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> currentValues <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> ose.CurrentValues <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> originalValues <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> ose.OriginalValues <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> valueArray <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> ArrayList <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">For</span> i <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> 0 <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">To</span> currentValues.FieldCount <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">-</span> 1<br /><br /><br /><br /></span>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"> 'you
can get from the ObjectStateEntry into the MetaData which actually comes from the
EDM<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> sName <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> currentValues.DataRecordInfo.FieldMetadata.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Item</span>(i).FieldType.Name <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> sCurrVal <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> currentValues.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Item</span>(i) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> sOrigVal <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> originalValues.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Item</span>(i)<br />
'nothing like a little LINQ query to find some info <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> changedProp <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> (From
prop <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">In</span> ose.GetModifiedProperties
Where prop <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> sName).FirstOrDefault <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> propModified <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">String</span> propModified <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">If</span>(changedProp <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Nothing</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">""</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"X"</span>) 
<br /><br />
'the funky property naming in this anonymous type is to get around a wierdness with 
<br />
'LINQ databinding that only occurs in VB - it alphabetizes the fields 
<br />
valueArray.<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Add</span>(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">With</span> _<br />
{._Index <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> i.ToString,
._Property <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> sName,
.Current <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> sCurrVal,
_<br />
.Original <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> sOrigVal,
.ValueModified <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> propModified}) <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Next</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Dim</span> frm <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">As</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">New</span> debuggerForm <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">With</span> frm.DataGridView1
.DataSource <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> valueArray <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">With</span> frm.lblState.Text <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> ose.State.ToString
frm.lblType.Text <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> ose.Entity.ToString
frm.ShowDialog() <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">If</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Sub</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Module</span></span>
        </pre>
        <p>
The form has no code, just a few controls:
</p>
        <p>
          <img src="http://www.thedatafarm.com/blog/content/binary/osevisualizerform.png" border="0" />
        </p>
        <p>
I created an assembly for my Entity Framework extension methods and just reference
the assembly anywhere I want to use it.
</p>
        <p>
Then when I want to use it, I call it against the EntityKey of an Entity Object:
</p>
        <pre>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"> context <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> AWModel.AWModel.AWEntities();
cust <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> context.Customers.Where(c
=&gt; c.CustomerID == 223).First(); cust.CompanyName <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"JULIE
COMPANY"</span>; cust.EntityKey.VisualizeObjectStateEntry(context);</span>
        </pre>
        <p>
This has been an enormously useful tool for when I have been presenting as well as
just working.
</p>
        <p>
Enjoy!
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=01278c8e-c86d-490f-93a0-1d72344de429" />
      </body>
      <title>A extension method for visualizing EntityStateObjects</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,01278c8e-c86d-490f-93a0-1d72344de429.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/04/29/AExtensionMethodForVisualizingEntityStateObjects.aspx</link>
      <pubDate>Tue, 29 Apr 2008 01:07:48 GMT</pubDate>
      <description>&lt;p&gt;
EntityStateObjects, to me, are one of the most important little pieces of the EF puzzle.
IT is the EntityStateObject that maintains all of the critical info for change tracking.
But it's hard to get the big picture of what's going on in there when debugging because
all of the important stuff is delivered through methods, not properties.
&lt;/p&gt;
&lt;p&gt;
I wanted so badly to write a debugger visualizer for them but they are not serializable
(big pout) so instead, I wrote an extension method that uses a ConditionalAttribute
to ensure it doesn't pop up during run time. It's for my book but I didn't want to
hold onto it until October when the book should be published.
&lt;/p&gt;
&lt;p&gt;
Since it's not a Debugger Visualiser, I refer to it as a&amp;nbsp;DebugTime visualizer. &lt;img alt=":-)" src="smilies/happy.gif"&gt;
&lt;/p&gt;
&lt;p&gt;
Here's what my ObjectStateEntry Visualizer looks like in action:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.thedatafarm.com/blog/content/binary/osevisualizer.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
All of the info is pulled from the ObjectStateEntry. At the top it tells the fully
qualified name of the type of the object being inspected as well as the object's EntityState.
&lt;/p&gt;
&lt;p&gt;
Then I use the various methods of the ObjectStateENtry to get the Original Values,
the Current Values, the names of the fields and a list of the names of the modified
fields.
&lt;/p&gt;
&lt;p&gt;
All of this data I feed into the grid.
&lt;/p&gt;
&lt;p&gt;
If the object is detached, then there is no ObjectStateEntry and the visualizer shows
this message when you try to run it:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.thedatafarm.com/blog/content/binary/osevisualizererror.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
So enough with the screenshots. Here's the code. And here's a collection of important
punctuations for you C# programmers who feel a need to translate
&lt;/p&gt;
&lt;p&gt;
[ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;&amp;nbsp; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;&amp;nbsp;
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;&amp;nbsp; ; ; ; ; ; ; ; ; ; ; ; ; ; ;]
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;pre&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Imports&lt;/span&gt; System.Runtime.CompilerServices &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Imports&lt;/span&gt; System.Data.Objects &lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'NOTE:
The objects in use here are not serializable so they can't be used&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'in
debugger visualizers. Instead, you'll need to use them directly, but you can &lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;'give
them a debug attribute so they are only available during debug mode.&lt;/span&gt; &amp;lt;Extension()&amp;gt;
_ &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Module&lt;/span&gt; Visualizers
&amp;lt;ConditionalAttribute(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"DEBUG"&lt;/span&gt;)&amp;gt;
_ &amp;lt;Extension()&amp;gt; _ &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; VisualizeObjectStateEntry(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; eKey &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; EntityKey, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;ByVal&lt;/span&gt; context &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; ObjectContext) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; ose &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; ObjectStateEntry &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Nothing&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;If&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Not&lt;/span&gt; context.ObjectStateManager.TryGetObjectStateEntry(eKey,
ose) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Then&lt;/span&gt; Windows.Forms.MessageBox.Show(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Object
is not currently being change tracked and no ObjectStateEntry exists."&lt;/span&gt;, _&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"ObjectStateEntry
Visualizer"&lt;/span&gt;, Windows.Forms.MessageBoxButtons.OK, Windows.Forms.MessageBoxIcon.Warning) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Else&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; currentValues &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; ose.CurrentValues &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; originalValues &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; ose.OriginalValues &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; valueArray &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; ArrayList &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;For&lt;/span&gt; i &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; 0 &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;To&lt;/span&gt; currentValues.FieldCount &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;-&lt;/span&gt; 1&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt; 'you
can get from the ObjectStateEntry into the MetaData which actually comes from the
EDM&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; sName &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; currentValues.DataRecordInfo.FieldMetadata.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Item&lt;/span&gt;(i).FieldType.Name &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; sCurrVal &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; currentValues.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Item&lt;/span&gt;(i) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; sOrigVal &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; originalValues.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Item&lt;/span&gt;(i)&lt;br&gt;
'nothing like a little LINQ query to find some info &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; changedProp &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; (From
prop &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;In&lt;/span&gt; ose.GetModifiedProperties
Where prop &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; sName).FirstOrDefault &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; propModified &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;String&lt;/span&gt; propModified &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;If&lt;/span&gt;(changedProp &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Nothing&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;""&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"X"&lt;/span&gt;) 
&lt;br&gt;
&lt;br&gt;
'the funky property naming in this anonymous type is to get around a wierdness with 
&lt;br&gt;
'LINQ databinding that only occurs in VB - it alphabetizes the fields 
&lt;br&gt;
valueArray.&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Add&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;With&lt;/span&gt; _&lt;br&gt;
{._Index &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; i.ToString,
._Property &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; sName,
.Current &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; sCurrVal,
_&lt;br&gt;
.Original &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; sOrigVal,
.ValueModified &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; propModified}) &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Next&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Dim&lt;/span&gt; frm &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;As&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;New&lt;/span&gt; debuggerForm &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;With&lt;/span&gt; frm.DataGridView1
.DataSource &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; valueArray &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;With&lt;/span&gt; frm.lblState.Text &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; ose.State.ToString
frm.lblType.Text &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; ose.Entity.ToString
frm.ShowDialog() &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;If&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Sub&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Module&lt;/span&gt; &lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
The form has no code, just a few controls:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.thedatafarm.com/blog/content/binary/osevisualizerform.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
I created an assembly for my Entity Framework extension methods and just reference
the assembly anywhere I want to use it.
&lt;/p&gt;
&lt;p&gt;
Then when I want to use it, I call it against the EntityKey of an Entity Object:
&lt;/p&gt;
&lt;pre&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt; context &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; AWModel.AWModel.AWEntities();
cust &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; context.Customers.Where(c
=&amp;gt; c.CustomerID == 223).First(); cust.CompanyName &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"JULIE
COMPANY"&lt;/span&gt;; cust.EntityKey.VisualizeObjectStateEntry(context);&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
This has been an enormously useful tool for when I have been presenting as well as
just working.
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=01278c8e-c86d-490f-93a0-1d72344de429" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,01278c8e-c86d-490f-93a0-1d72344de429.aspx</comments>
      <category>Data Access</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=5c22074b-82c4-460d-98a9-89742ccb7fc5</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,5c22074b-82c4-460d-98a9-89742ccb7fc5.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,5c22074b-82c4-460d-98a9-89742ccb7fc5.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5c22074b-82c4-460d-98a9-89742ccb7fc5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
Along with a few hundred other <a href="http://www.thedatafarm.com/blog/ct.ashx?id=5c22074b-82c4-460d-98a9-89742ccb7fc5&amp;url=http%3a%2f%2fwww.devconnections.com">DevConnections</a> attendees,
I got a sneak peek of the EntityDatasSource control on Monday during <a href="http://www.thedatafarm.com/blog/ct.ashx?id=5c22074b-82c4-460d-98a9-89742ccb7fc5&amp;url=http%3a%2f%2fblogs.msdn.com%2fdsimmons">Danny
Simmons'</a> Entity Framework Architecture session.
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
 
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
I think I paid more attention to the control than what Danny was saying because I
was desperate to see how it was set up.
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
 
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
Before digging in though, I also wanted to note that the UI of the EDM Designer looks
really pretty. I noticed that the association lines/connectors looked different; the
whole thing was cleaner looking (were the association names gone?) and the Entities
have their own little representative icon now. I can't wait to see this in more detail.
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
 
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
The EntityDataSource wizard identifies EntityConnections in the config file and offers
those to as choices for building the data source from. Once that is selected, the
EntityContainer is also identified, offering the list of EntitySets from the container
to use for the data source.
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
 
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
Like the LINQDatasource, you have the option of selecting all of the properties at
once or selecting specific properties which will perform projection. Like the LINQDataSource,
if you project properties, then you won't get a full type back and the data will not
be updatable.
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
 
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
There was a drop down list below the one where you choose which EntitySet you want
to work with but I don't recall what it's name was. Danny did not drop it down. All
I can think of that might be there (hopeful) is derived types since they don't have
their own EntitySet.
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
 
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
Although I don't remember seeing it during the session, Danny did say that you can
choose to eager load related data in the same way that you can with the Include method.
I don't know how this is done or if it will impact updating, but I don't know why
it would.
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
 
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
Like the LinqDataSource,  the EntityDataSource performs server side paging, and
it does client side caching - of current AND original data. The original data is not
stored as complete objects, but the minimal data necessary to reconstruct state when
it's time to update. Updates happen, like any other data source, one at a time. So
you have to pick an item, edit it and update it.
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
 
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
 I've got some of my own examples of using series of entities in web apps which
are very different from this. My solution, however, is aimed at a different scenario.
Where the EntityDataSource is more scalable because of the server side paging and
the fact that it is not caching full objects, my solution allows the user to do a
bunch of edits then save them all at once. I keep the objects in the client side cache
(I know - horrors! - but it's an option for a developer to choose) and a collection
of original objects cached on the server, though it's an application cache, not a
session cache.
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
 
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
Seeing the EntityDataSource has already given me some ideas of taking my solution
and making it more scalable without losing the benefit of the bulk editing.
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
 
</p>
        <p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri">
I can't wait to get my hands on the new bits!
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=5c22074b-82c4-460d-98a9-89742ccb7fc5" />
      </body>
      <title>Sneak Peek at the EntityDataSource Control</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,5c22074b-82c4-460d-98a9-89742ccb7fc5.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/04/27/SneakPeekAtTheEntityDataSourceControl.aspx</link>
      <pubDate>Sun, 27 Apr 2008 13:20:30 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
Along with a few hundred other &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=5c22074b-82c4-460d-98a9-89742ccb7fc5&amp;amp;url=http%3a%2f%2fwww.devconnections.com"&gt;DevConnections&lt;/a&gt; attendees,
I got a sneak peek of the EntityDatasSource control on Monday during &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=5c22074b-82c4-460d-98a9-89742ccb7fc5&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fdsimmons"&gt;Danny
Simmons'&lt;/a&gt; Entity Framework Architecture session.
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
I think I paid more attention to the control than what Danny was saying because I
was desperate to see how it was set up.
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
Before digging in though, I also wanted to note that the UI of the EDM Designer looks
really pretty. I noticed that the association lines/connectors looked different; the
whole thing was cleaner looking&amp;nbsp;(were the association names gone?) and the Entities
have their own little representative icon now. I can't wait to see this in more detail.
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
The EntityDataSource wizard identifies EntityConnections in the config file and offers
those to as choices for building the data source from. Once that is selected, the
EntityContainer is also identified, offering the list of EntitySets from the container
to use for the data source.
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
Like the LINQDatasource, you have the option of selecting all of the properties at
once or selecting specific properties which will perform projection. Like the LINQDataSource,
if you project properties, then you won't get a full type back and the data will not
be updatable.
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
There was a drop down list below the one where you choose which EntitySet you want
to work with but I don't recall what it's name was. Danny did not drop it down. All
I can think of that might be there (hopeful) is derived types since they don't have
their own EntitySet.
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
Although I don't remember seeing it during the session, Danny did say that you can
choose to eager load related data in the same way that you can with the Include method.
I don't know how this is done or if it will impact updating, but I don't know why
it would.
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
Like the LinqDataSource,&amp;nbsp; the EntityDataSource&amp;nbsp;performs server side paging,&amp;nbsp;and
it does client side caching - of current AND original data. The original data is not
stored as complete objects, but the minimal data necessary to reconstruct state when
it's time to update. Updates happen, like any other data source, one at a time. So
you have to pick an item, edit it and update it.
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
&amp;nbsp;I've got some of my own examples of using series of entities in web apps which
are very different from this. My solution, however, is aimed at a different scenario.
Where the EntityDataSource is more scalable because of the server side paging and
the fact that it is not caching full objects, my solution allows the user to do a
bunch of edits then save them all at once. I keep the objects in the client side cache
(I know - horrors! -&amp;nbsp;but it's an option for a developer to choose) and a collection
of original objects cached on the server, though it's an application cache, not a
session cache.
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
Seeing the EntityDataSource has already given me some ideas of taking my solution
and making it more scalable without losing the benefit of the bulk editing.
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;
I can't wait to get my hands on the new bits!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=5c22074b-82c4-460d-98a9-89742ccb7fc5" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,5c22074b-82c4-460d-98a9-89742ccb7fc5.aspx</comments>
      <category>Data Access</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=e8a1e49f-ff34-476a-bf22-4fda555c1db4</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,e8a1e49f-ff34-476a-bf22-4fda555c1db4.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,e8a1e49f-ff34-476a-bf22-4fda555c1db4.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e8a1e49f-ff34-476a-bf22-4fda555c1db4</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It's been in there from the start (well at least since VS2003), but I have only recently
started taking advantage of the "Format Document" and "Format Selection" functions
in Visual Studio to help with the readability of code or xml. <a href="http://www.thedatafarm.com/blog/ct.ashx?id=e8a1e49f-ff34-476a-bf22-4fda555c1db4&amp;url=http%3a%2f%2fblogs.devsource.com%2fdevlife%2fcontent%2fnet_general%2fone_of_my_favorite_unsung_features_in_visual_studio_1.html">Read
more...</a></p>
        <p>
[A New <a href="http://www.thedatafarm.com/blog/ct.ashx?id=e8a1e49f-ff34-476a-bf22-4fda555c1db4&amp;url=http%3a%2f%2fblogs.devsource.com%2fdevlife">DevLife</a> Post]
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=e8a1e49f-ff34-476a-bf22-4fda555c1db4" />
      </body>
      <title>One of my favorite, unsung features in Visual Studio</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,e8a1e49f-ff34-476a-bf22-4fda555c1db4.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/04/26/OneOfMyFavoriteUnsungFeaturesInVisualStudio.aspx</link>
      <pubDate>Sat, 26 Apr 2008 14:14:09 GMT</pubDate>
      <description>&lt;p&gt;
It's been in there from the start (well at least since VS2003), but I have only recently
started taking advantage of the "Format Document" and "Format Selection" functions
in Visual Studio to help with the readability of code or xml. &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=e8a1e49f-ff34-476a-bf22-4fda555c1db4&amp;amp;url=http%3a%2f%2fblogs.devsource.com%2fdevlife%2fcontent%2fnet_general%2fone_of_my_favorite_unsung_features_in_visual_studio_1.html"&gt;Read
more...&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
[A New &lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=e8a1e49f-ff34-476a-bf22-4fda555c1db4&amp;amp;url=http%3a%2f%2fblogs.devsource.com%2fdevlife"&gt;DevLife&lt;/a&gt; Post]
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=e8a1e49f-ff34-476a-bf22-4fda555c1db4" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,e8a1e49f-ff34-476a-bf22-4fda555c1db4.aspx</comments>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7</wfw:commentRss>
      <title>DevTeach is coming to Toronto Ontario in just a few more weeks!</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/04/26/DevTeachIsComingToTorontoOntarioInJustAFewMoreWeeks.aspx</link>
      <pubDate>Sat, 26 Apr 2008 02:18:28 GMT</pubDate>
      <description>&lt;div class=itemTitleStyle&gt;&lt;strong&gt;I COPIED THIS ENTIRE BLOG POST DIRECTLY FROM &lt;/strong&gt;&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7&amp;amp;url=http%3a%2f%2fguy.dotnet-expertise.com%2fPermaLink%2cguid%2cd94fb145-722c-4b78-948b-a6fe0a08209b.aspx"&gt;&lt;strong&gt;GUY
BARRETTE'S BLOG&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;nbsp;and made one little edit! So shoot me! &lt;img alt=":-)" src="smilies/happy.gif"&gt;&lt;/strong&gt;
&lt;/div&gt;
&lt;div class=itemTitleStyle&gt;&amp;nbsp;
&lt;/div&gt;
&lt;div class=itemTitleStyle&gt;&lt;a class=TitleLinkStyle href="http://www.thedatafarm.com/blog/ct.ashx?id=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7&amp;amp;url=http%3a%2f%2fguy.dotnet-expertise.com%2fPermaLink%2cguid%2cd94fb145-722c-4b78-948b-a6fe0a08209b.aspx"" rel=bookmark&gt;&lt;em&gt;DevTeach
Toronto is coming - Register!&lt;/em&gt;&lt;/a&gt;&lt;em&gt; &lt;/em&gt;
&lt;/div&gt;
&lt;div class=itemBodyStyle&gt;
&lt;p&gt;
&lt;em&gt;If you're living in Toronto and don't attend &lt;/em&gt;&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7&amp;amp;url=http%3a%2f%2fguy.dotnet-expertise.com%2fct.ashx%3fid%3dd94fb145-722c-4b78-948b-a6fe0a08209b%26url%3dhttp%253a%252f%252fwww.devteach.com"&gt;&lt;em&gt;DevTeach&lt;/em&gt;&lt;/a&gt;&lt;em&gt;,&amp;nbsp;[&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7&amp;amp;url=http%3a%2f%2fguy.dotnet-expertise.com%2fPermaLink%2cguid%2cd94fb145-722c-4b78-948b-a6fe0a08209b.aspx"&gt;Guy
Barrette says he's&lt;/a&gt;] gonna beat you up and force you to code in Clipper for the
rest of your life.&amp;nbsp; Seriously, DevTeach has one of the greatest speakers lineup
of all the .NET conferences.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Honestly, where can you hear, see, talk to, describe your problems (IT/Dev&amp;nbsp;related
or not) and have a beer with these guys/gals?&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;img height=117 alt="Scott Bellware" src="http://www.devteach.com/Member/000121.jpg" width=90&gt; &lt;img height=117 alt="Benjamin Day" src="http://www.devteach.com/Member/003389.jpg" width=90&gt; &lt;img height=117 alt="Oren Eini" src="http://www.devteach.com/Member/001993.jpg" width=90&gt; &lt;img height=117 alt="Cathi Gero" src="http://www.devteach.com/Member/000037.jpg" width=90&gt; &lt;img height=117 alt="Barry Gervin" src="http://www.devteach.com/Member/000635.jpg" width=90&gt; &lt;img height=117 alt="The one and only Kate Gregory" src="http://www.devteach.com/Member/000026.jpg" width=90&gt; &lt;img height=117 alt=YAG src="http://www.devteach.com/Member/000030.jpg" width=90&gt; &lt;img height=117 alt="The Zen of Scott Hanselman" src="http://www.devteach.com/Member/004589.jpg" width=90&gt; &lt;img height=117 alt=Moi src="http://www.devteach.com/Member/000042.jpg" width=90&gt; &lt;img height=117 alt="Beth[mond] Massi" src="http://www.devteach.com/Member/000364.jpg" width=90&gt; &lt;img height=117 alt="Kevin MacNeish"src="http://www.devteach.com/Member/000011.jpg" width=90&gt; &lt;img height=117 alt="Ted Neward" src="http://www.devteach.com/Member/000128.jpg" width=90&gt; &lt;img height=117 alt="Roy Osherove" src="http://www.devteach.com/Member/001991.jpg" width=90&gt; &lt;img height=117 alt=Rodman src="http://www.devteach.com/Member/000018.jpg" width=90&gt; &lt;img height=117 alt="Partyboy Palermo"src="http://www.devteach.com/Member/003551.jpg" width=90&gt; &lt;img height=117 alt="Paul [Yes, it's true. I live on a boat] Sherriff" src="http://www.devteach.com/Member/003439.jpg" width=90&gt; &lt;img height=117 src="http://www.devteach.com/Member/000428.jpg" width=90 alt="Joel Semeniuk" &gt; &lt;img height=117 alt="Richard Campbell" src="http://www.devteach.com/Member/000369.jpg" width=90&gt; &lt;img height=117 src="http://www.devteach.com/Member/000719.jpg" width=90 alt="Peter DeBetta"&gt; &lt;img height=117 src="http://www.devteach.com/Member/000088.jpg" width=90 alt="Don Kiely of the Alaska Keilys" &gt; &lt;img height=117 src="http://www.devteach.com/Member/000735.jpg" width=90 alt="Bill Vaughn" &gt; &lt;img height=117 src="http://www.devteach.com/Member/000720.jpg" width=90 alt="Adam Machanic"&gt; &lt;img height=117 src="http://www.devteach.com/Member/000070.jpg" width=90 alt="Carl Franklin"&gt; &lt;img src="http://profile.ak.facebook.com/v230/289/39/n636400649_674.jpg" width=90 alt="Rob Windsor"&gt; &lt;img src="http://www.devteach.com/Member/000017.jpg" width=90 alt="Jim Duffy"&gt; &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;And that's only half of them!!!&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Need more reasons?&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;Keynote by Scott Hanselman, Microsoft&lt;br&gt;
&lt;/strong&gt;Scott Hanselman is one of the most prolific, renowned and respected blogger
(&lt;/em&gt;&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7&amp;amp;url=http%3a%2f%2fguy.dotnet-expertise.com%2fct.ashx%3fid%3dd94fb145-722c-4b78-948b-a6fe0a08209b%26url%3dhttp%253a%252f%252fwww.hanselman.com"&gt;&lt;em&gt;http://www.hanselman.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;)
and podcaster (&lt;/em&gt;&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7&amp;amp;url=http%3a%2f%2fguy.dotnet-expertise.com%2fct.ashx%3fid%3dd94fb145-722c-4b78-948b-a6fe0a08209b%26url%3dhttp%253a%252f%252fwww.hanselminutes.com"&gt;&lt;em&gt;http://www.hanselminutes.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;)
about technologies. Scott is a hands-on thinker, a renowned speaker and writer. He
has written a few books, most recently with Bill Evjen and Devin Rader on Professional
ASP.NET. In July 2007, he joined Microsoft as a Senior Program Manager in the Developer
Division. In his new role he'll continue to explore and explain a broad portfolio
of technologies, both inside and outside Microsoft. He aims to spread the good word
about developing software, most often on the Microsoft stack. Before this he was the
Chief Architect at Corillian Corporation, now a part of Checkfree, for 6+ years and
before that he was a Principal Consultant at STEP Technology for nearly 7 years.&lt;br&gt;
&lt;/em&gt;&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7&amp;amp;url=http%3a%2f%2fguy.dotnet-expertise.com%2fct.ashx%3fid%3dd94fb145-722c-4b78-948b-a6fe0a08209b%26url%3dhttp%253a%252f%252fwww.devteach.com%252fkeynote.aspx"&gt;&lt;em&gt;http://www.devteach.com/keynote.aspx&lt;/em&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;Silverlight 2.0 workshop&lt;/strong&gt;
&lt;br&gt;
For the first time an independent conference is having a workshop on Building Business
Applications with Silverlight 2.0.&amp;nbsp; Join Rod Paddock and Jim Duffy as they give
you a head start down the road to developing business-oriented Rich Internet Applications
(RIA) with Microsoft Silverlight 2.0. In case you just crawled out from under a rock,
Microsoft Silverlight 2.0 is a cross-browser, cross-platform, and cross-device plug-in
positioned to revolutionize the way next generation Rich Internet Applications are
developed. Microsoft’s commitment to providing an extensive platform for developers
and designers to collaborate on creating the next generation of RIAs is very clear
and its name is Silverlight 2.0. In this intensive, full-day workshop, Rod and Jim
will share their insight and experience building business applications with Silverlight
2.0 including a review of some of the Internet’s more visible Silverlight web applications.
This workshop is happening on Friday May 16 at the Hilton Toronto.&lt;br&gt;
&lt;/em&gt;&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7&amp;amp;url=http%3a%2f%2fguy.dotnet-expertise.com%2fct.ashx%3fid%3dd94fb145-722c-4b78-948b-a6fe0a08209b%26url%3dhttp%253a%252f%252fwww.devteach.com%252fPostConference.aspx%2523PreSP"&gt;&lt;em&gt;http://www.devteach.com/PostConference.aspx#PreSP&lt;/em&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;Bonus session: .NET Rock host a panel May 14th at 18:00&lt;br&gt;
&lt;/strong&gt;This year the bonus session (Wednesday May 14 at 18:00) will be a panel of
speakers debating the Future of .NET. Where is .NET going? How will new development
influence .NET and be influenced by .NET? Join Carl Franklin and Richard Campbell
from .NET Rocks as they moderate a discussion on the future directions of .NET. The
panellists include individuals who have strong visions of the future of software development
and the role that .NET can play in that future. Attend this session and bring your
questions to get some insight into the potential future of .NET! This bonus session
is free for everyone. Panelists are: Ted Neward,Oren Eini ,Scott Bellware&lt;br&gt;
&lt;/em&gt;&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7&amp;amp;url=http%3a%2f%2fguy.dotnet-expertise.com%2fct.ashx%3fid%3dd94fb145-722c-4b78-948b-a6fe0a08209b%26url%3dhttp%253a%252f%252fwww.devteach.com%252fBonusSession.aspx"&gt;&lt;em&gt;http://www.devteach.com/BonusSession.aspx&lt;/em&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;Party with Palermo, DevTeach Toronto Edition&lt;/strong&gt;
&lt;br&gt;
Jeffrey Palermo (MVP) is hosting Monday May 12th in Toronto is acclaimed "Party with
Palermo". This is the official social event&amp;nbsp; kicking off DevTeach Toronto. The
event is not just for the attendees of Toronto it’s&amp;nbsp; a free event for everyone.
It’s a unique chance for the attendees, speakers and locals&amp;nbsp; to meet and talk
with a free beer.&amp;nbsp;&amp;nbsp; The event will be held at the Menage club&amp;nbsp; location
and you need to RSVP to attend. Get all the details at this link: 
&lt;br&gt;
&lt;/em&gt;&lt;a href="http://www.thedatafarm.com/blog/ct.ashx?id=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7&amp;amp;url=http%3a%2f%2fguy.dotnet-expertise.com%2fct.ashx%3fid%3dd94fb145-722c-4b78-948b-a6fe0a08209b%26url%3dhttp%253a%252f%252fwww.partywithpalermo.com%252f"&gt;&lt;em&gt;http://www.partywithpalermo.com/&lt;/em&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Make sure that DevTeach comes back to Toronto.&amp;nbsp; Register right now for this
year's conference.&lt;/em&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7" /&gt;</description>
      <comments>http://www.thedatafarm.com/blog/CommentView,guid,0aaeb2ec-c48e-4efe-8f3f-f80ea46efeb7.aspx</comments>
      <category>Just Rambling</category>
    </item>
    <item>
      <trackback:ping>http://www.thedatafarm.com/blog/Trackback.aspx?guid=b29d900f-9cbf-497a-91c4-da2c0ee31228</trackback:ping>
      <pingback:server>http://www.thedatafarm.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.thedatafarm.com/blog/PermaLink,guid,b29d900f-9cbf-497a-91c4-da2c0ee31228.aspx</pingback:target>
      <dc:creator>Julie Lerman</dc:creator>
      <wfw:comment>http://www.thedatafarm.com/blog/CommentView,guid,b29d900f-9cbf-497a-91c4-da2c0ee31228.aspx</wfw:comment>
      <wfw:commentRss>http://www.thedatafarm.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b29d900f-9cbf-497a-91c4-da2c0ee31228</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This bit me in the butt ... TWICE!
</p>
        <p>
When using WebDataGen so that you can get a proxy class for an Astoria data service,
if you are running under UAC, the output file will NOT get created, however the tool
reports that the file was created successfully.
</p>
        <p>
I spent a lot of time trying to find the file or figure out what I was doing wrong.
</p>
        <p>
Then a week later, when it was late at night and I was sick so my brain was a little
foggy, I had to create another proxy but totally forgot the pain I had gone through
previously. It was an hour before I finally remembered that I had to run the command
window as admin.
</p>
        <p>
So word to the wise....and I should probably make a not of this in the forums.
</p>
        <img width="0" height="0" src="http://www.thedatafarm.com/blog/aggbug.ashx?id=b29d900f-9cbf-497a-91c4-da2c0ee31228" />
      </body>
      <title>Generating proxies with Astoria's WebDataGen under Vista UAC</title>
      <guid isPermaLink="false">http://www.thedatafarm.com/blog/PermaLink,guid,b29d900f-9cbf-497a-91c4-da2c0ee31228.aspx</guid>
      <link>http://www.thedatafarm.com/blog/2008/04/25/GeneratingProxiesWithAstoriasWebDataGenUnderVistaUAC.aspx</link>
      <pubDate>Fri, 25 Apr 2008 02:55:09 GMT</pubDate>
      <description>&lt;p&gt;
This bit me in the butt ... TWICE!
&lt;/p&gt