This is a little test popfly mashup that I created from an Astoria data service. You can read the blog post about how I created the data source component here.
Category Archives: Data Access
Entity Framework is …. complex
On Friday, I did a full day workshop on Entity Framework called Entity Framework 0-60. Well, I translated it into the local measurement and renamed it 0-100 (km).
One of the comments I got back from an attendee was:
“It was a great overview on a really interesting topic. It was a bit more complex than I expected so it was good to get the expert’s view”
“A bit more complex.” This is definitely one of the things that makes EF so difficult to teach or to write about. Even in 6 hours there’s so much that I have to glaze over. I tried not to linger in introductory information which they can get more easily elsewhere and spent more time teaching some of the things that are not so obvious and harder to grasp. The last 45 minutes was free form as I invited them to pick my brain and take advantage of all that I have learned so far. I plan to do that again in upcoming workshops.
I think one of the critical things I shared with them during the day was something that is also common to any LINQ queries, which is that you can very easily and unknowingly make trips to the database when you think you are just looking at only the cached objects. When I first mentioned this, the room went silent and their eyes got very big, so I realized that I better spend a little more time exploring this than I had planned.
I’m doing this workshop again this coming Sunday at DevConnections in Orlando (still seats available!) and I expect the day to transpire very differently than it did in Sweden this past Friday. I even completely reorganized the slides on my way home from Sweden because I learned a lot from the questions and reactions of Friday’s attendees.
Yes, Entity Framework is complex. And, as the day progressed, I surprised myself with how much I have really learned about this technology. And I seem to have a Rolodex in my head with listings of forums threads and blog posts that I frequently referred to which was very handy.
Entity Framework & ADO.NET Data Services to Ship with VS 2008 SP1 & .NET 3.5 SP1
These things tend to happen when I’m travelling and don’t check my feeds for an entire day. I can’t say this is a huge surprise since it’s very sensible. I’m happy to finally have some tangible news from the team. I’ll be happy to share this news in my Entity Framework workshop tomorrow! During the conference I actually had someone suggest that they still didn’t believe that EF wouldn’t go the way of Object Spaces. Sheesh!
Entity Framework & ADO.NET Data Services to Ship with VS 2008 SP1 & .NET 3.5 SP1
It’s settled! The Entity Framework (and the Entity Designer) along with ADO.NET Data Services will RTM as part of the Visual Studio 2008 and .NET 3.5 SP1 releases!
Unfortunately, we don’t have official release dates at this point, but stay tuned. You’ll also want to keep an eye out for the upcoming SP1 Beta 1, which will be your next chance to check out updated bits for both of these products.
Elisa Flasko
Program Manager, Data Programmability
The two deck presentation
Doug Seven is one of the track chairs for the track that I’m speaking in at TechEd Developer. I was talking to him the other day about finding the line between the "Presentation Zen" type of presentation (where an extreme example would be a slide with nothing more than a smiley face on it) and a presentation that will be useful to attendees (or other downloaders) after the fact that has actual content on it as the presenter is no longer there to fill in the blanks.
He gave me a great suggestion – prepare two decks. take my typical "stand-alone" decks which is very dense, the make a copy of it and strip the copy down. Way down.
So many of the bullet points are things I’m talking about. Why should the attendees need to be destracted by so many details on the deck when I’m talking about them anyway?
But, and here’s what’s great about this idea – use the dense deck to share with attendees after the fact. All of the details that I talked about are now there right on the deck for their benefit.
I love this idea so much that I did it to my decks for the DevSummit. I have done one of my sessions already using the stripped down deck, then gave the stand-alone version of the deck to the track chair to put on the website.
I’m doing a silverlight talk this afternoon and cut the deck in half and on the remaining slides, removed a lot of content and replaced some of it with images instead. No smiley faces though.
I get to have my cake and eat it to and I think it’s a win-win for the attendees during and after the live session.
Oh, *that* Niels Berglund!
I’m not a DBA. I’ve probably said that about 5000 times. So I am often pretty much out of the loop in the world of SQL Server. So, I really embarrassed myself today asking Niels Berglund if he was a SQL Server guy. I now realize that it would be like asking Kimberly Tripp if she was a SQL Server gal.
And because I am also on a mission to make sure that DBAs are at least aware that the EDM and Entity Framework supports stored procedures, I continued to dig my hole deeper by asking him if he knew that. Turns out he did a full day workshop on LINQ to SQL and Entity Framework at DevWeek in the U.K. I didn’t know about this when I wrote a blog post about DevWeek.
So I will now be subscribing to Niels’ blog along with Bob B’s, since I’m always trying to better understand the DBA perspective on Entity Framework.
REST – The Elevator Pitch
I attended Christian Weyer’s Astoria sesson this morning at the DevSummit , one of the few not in Swedish that I could understand! In fact, I was surprised to walk into Tess Ferrandez’s session and hear her speaking fluent Swedish. it turns out she lived in Sweden for a time.
Christian shared a brilliant quote in his session which was how to explain REST in one sentence. He got it from David Meggison’s “REST – The Quick Pitch” blog post.
With REST, every piece of information has its own URL.
I have had to try to explain REST in my own Astoria talks and I am going to adopt this brilliant quote. Thank Christian!
We’ll see if Christian survives his stay in Stockholm as he had quite a lot of fun (and it was hilarious I have to say) talking about the World Cup Soccer 2006. Hey, they only beat Sweden by 2 goals! My only memory of the World Cup was all of the TechEd attendees swarmed swarmed around the many screens at the conference displaying the matches.
Model first with EDM?
In my previous post, I managed to update a simple model from an existing database. But then I started trying to do things like build my project and ran into so many problem trying to get my simple model to interact with the AdventureWorks database that I finally gave up.
I actually wrote my thoughts on this in a question on the MSDN forum for Entity Framework, with the point of the question being "is there a real example of this? Or is it just a concept that looks good on paper?"
I care a lot about this becuase I have been sharing this concept (which does make sense to me) that the EDMs loose coupling to the database means that you could map the CSDL to different databases.
But the AdventureWorks database just had too many constraints – such as non-nullable fields that I didn’t have in my model and I finally gave up because it was forcing me to modify the CSDL and I would also have to add in some business logic to deal with some of these non-nullable fields. And even if I did that, who knows what other problems would pop up?
Update after I gave myself a little time while eating lunch to think about this some more, I crossed out "finally gave up" becasue it’s basically not in my nature. I decided to go about this in a different direction with just ONE entity and succeeded by removing the unused non-nullable fields from the SSDL and mapped the entity to Insert/Update/Delete sprocs. All I have to say to myself at this point is "well, duh!" The insert stored proc provides the missing non-nullable fields and the update stored proc updates the modifieddate for me. SO problem solved in a not very realistic example, but I plan to build it up thought not today – I’ve already invested too much time. There’s a lot of flexilibity in the model, but we all still have a lot of learning to do for our various use cases.
You can read my more complete thoughts on this in the forum post and if you want to follow the conversation you can sign up to get alerts on this thread from the MSDN forums.
Oh, and if you’ve never signed up for alerts before, you might want to read this blog post I wrote last summer: A few MSDN Forums tips (which I learned the hard way – as usual).
EF UpdateModel and naming conflicts
When you use the UpdateModel feature of the Entity Framework design tools, the process relies on matching up existing entity names to table names, more specifically name of objects in the CSDL with names of objects in the database.
IF you have selected objects to add and nothing with that name already exists, it will add a new entity in the model, otherwise, it will use the existing entity.
There are changes coming to how this works detailed in this blog post by Noam Ben-Ami.
But I got bit by something that I overlooked which took hours to pinpoint the cause of the problem, so I wanted to share it.
I had created a model from scratch that was a simple, generic commerce app (see image below). I created entities for Customer, Order, LineItem, Address and Product with some properties, entity keys and associations.
Then I linked it up to a database using UpdateModel to create the SSDL for me but nothing happened.
It took a lot of experimenting before I realized that the problem was that I was trying to add in a CustomerAddress table but I had an association named CustomerAddress. If that had been an entity, it wouldn’t have posed a problem. But the wizard did not know how to handle the fact that it was an association and just completely gave up the ghost.
The only problem I see here is that some indication of the conflict would have helped me figure out what was wrong a little sooner, though I don’t expect the wizard to overcome the conflict on its own. I did make a note of this in the forums. However, I am putting the info here for posterity in case it’s too late to change the wizard for RTM and somebody else gets stuck on the same problem.

Eight Entity Framework Tutorials on DataDeveloper.NET
August 2008 Note: the datadeveloper.net site is “in between hosts”. I am not responsible for this site, just a contributor. I don’t have access to the tutorials but I have found some copies of them and am putting them here: www.learnentityframework.com/tutorials.
I’ve written a set of Entity Framework (and one which is more general for LINQ to Entities and LINQ to SQL) tutorials that are on DataDeveloper.NET Tutorials page.
Most of these are beginner basics. The “101 Tutorials” are designed to make sure new programmers don’t get completely lost. So if you need the extra handholding, it’s there, if not just skim over it to get to the juicy bits.
The Tutorials so far are:
101 Tutorial:Creating an ADO.NET Entity Framework Entity Data Model101 Tutorial: Use an Entity Framework Entity as a WinForms Data Source
Many to Many Relationships in the Entity Data Model
Using Stored Procedures for Insert, Update & Delete in an Entity Data Model
Naming conventions in an Entity Data Model: Cleaning up the wizard-generated EDM
Adding items to a LINQ Query of anonymous types – after the fact
ObjectQuery, LINQ to Entities and IQueryable
The return type of a LINQ query is an IQueryable, even a LINQ to Entities query.
Here is a screenshot of a LINQ to Entities query at design time (code is NOT being debugged).

But when the query has been processed, it’s no longer an IQueryable, but an ObjectQuery.

What’s going on here?
At design time, the compiler recognizes that it’s a LINQ query and therefore assumes the return will be an IQueryable.
However LINQ to Entities queries are sent to ObjectServices which return an ObjectQuery, so after it’s processed, it is actually an ObjectQuery.
So, since it’s an ObjectQuery after all, wouldn’t it be nice to leverage ObjectQuery features like MergeOptions on a LINQ to Entities query? You can!
But how? At design time, the query is an IQueryable, not an ObjectQuery and doesn’t have MergeOptions.

No worries. ObjectQuery implements IQueryable.

So you can cast the LINQ to Entities query to an ObjectQuery, set the MergeOption and, as Jeffrey Palermo would say, party on the LINQ to Entities query (though he may not be likely to say that in the context of Entity Framework ;-)).
Using context As New AdventureWorksLTEntitiesDim query = From c In context.Customer Where c.LastName.StartsWith(“S”)Dim objquery = CType(query, ObjectQuery(Of Customer))objquery.MergeOption = MergeOption.OverwriteChangesDim cust = query.ToList.FirstConsole.WriteLine(cust.LastName)cust.LastName = cust.LastName.Trim & “___XYZ”cust = query.ToList.FirstConsole.WriteLine(cust.LastName)End UsingNotice that I’m still performing the operations against the LINQ query after I cast it to the ObjectQuery.
I could also have done something like
Dim custs = objquery.Execute(MergeOption.OverwriteChanges)Thanks to Danny for reminding me about the casting! The blog post is intended to lock it into my brain.
