A couple of months ago I watched some of videos from Microsoft PDC 2010 at http://player.microsoftpdc.com/
One of the interesting presentations was Jeff Derstadt and Tim Laverty’s “Code First with Entity Framework”, viewable here (or direct download here). In the demo, Jeff and Tim very quickly create a basic twitter clone using ASP.NET MVC 2 and EF Code-First CTP4.
For fun I decided to watch the talk and follow along in Visual Studio. This would give me a chance to play with some Microsoft bleeding edge pre-release stuff: ASP.NET MVC 3 (RC2) and Razor, NuGet, and EF Code-First CTP5 (CTP4 was the “Magic Unicorn Edition“).
If you are as lame as me, here’s some tips to help you do a similar walkthrough.
You’ll need Visual Studio 2010, and to download ASP.NET MVC 3 (currently RC2) which also installs NuGet.
Once you’ve created your MVC application, you need to add EF Code-First by using NuGet. NuGet’s only been around for a couple of months and already it’s a gotten disorganised and is hard to find the right package. In the demo, Tim adds a reference to “EFCTP4” and indeed that is still present in NuGet.
But if you dig around a bit and search for “EFCodeFirst”, well that appears to be EFCTP5. The package you should install is now called “EntityFramework”.
The first issue I came across was getting EF to talk to SQL Server, as mentioned in my previous post.
A few other things I’ve found that must have changed between CTP4 and CTP5:
1. I don’t think the [StoreIgnore] attribute exists any more. I couldn’t find it, and in my experiments it didn’t seem to be necessary to tell EF to ignore the calculated “TweetActivity” field. I did discover the [NotMapped] attribute which you can use if you want to tell EF not to save a property. I think it’s the same as [StoreIgnore].
2. When it comes time to setup the DB initialiser for populating the DB with static data, Tim does something like this:
public class TweetInitializer : AlwaysRecreateDatabase<TweetContext>
However, AlwaysRecreateDatabase doesn’t exist any more. I think:
public class TweetInitializer : DropCreateDatabaseIfModelChanges<TweetContext>
might be its replacement.
3. I had a strange issue when I tried to create the oData feed. Visual Studio couldn’t find the System.Data.Objects namespace. A quick fix was to add an empty “ADO.NET Entity Data Model” to my project, and then delete it.
4. When you view your oData feed in your browser, by default it appears all purty:
In order to see the raw XML you need to disable IE’s “feed reading view”.
Tools –> Internet Options –> Content tab –> Feeds and web slices –> Settings –> Uncheck “Turn on feed reading view”.