I just installed CTP of entity framework 4.0 (2.0 technically). I decided to test the most advertized feature – ability to have actual foreign keys (IDs) in addition to navigation properties. The lack of this feature has been the biggest annoyance for me while working with Entity Framework for many months now.
Here is the model I created
As you can see Companies have Contacts, and each contact object now has CompanyID in addition to Company navigation property. I had to select this option while generating the model from the database. The checkbox for option to include foreign key values was available on one of the wizard screens.
Here is the code I wrote for testing:
using (RolodexEntities context = new RolodexEntities())
CompanyContact newConact = new CompanyContact();
newConact.CompanyId = 2;
newConact.BaseSalary = 1;
newConact.Birthday = DateTime.Today;
newConact.FirstName = "Sergey";
newConact.LastName = "Barskiy";
newConact.RankId = 1;
Hurray! It worked! New contact was added to the database and linked to Company with ID of 2 and Rank with ID of 1.
This feature to me is invaluable in n-Tier development when a developer has to replay the changes on the server after allowing the user to edit the data on the client. Now, we can just transmit all properties of a Contact to the server, (probably with IsNew, IsUpdated, IsDeleted flags), set the foreign keys via IDs, then save.