Escolar Documentos
Profissional Documentos
Cultura Documentos
Hands-on Lab
Manual
Information in this document, including URL and other Internet Web site references, is subject to change without notice.
Unless otherwise noted, the example companies, organizations, products, domain names, e-mail addresses, logos,
people, places, and events depicted herein are fictitious, and no association with any real company, organization, product,
domain name, e-mail address, logo, person, place, or event is intended or should be inferred. Complying with all
applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this
document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means
(electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission
of Microsoft Corporation.
The names of manufacturers, products, or URLs are provided for informational purposes only and Microsoft makes no
representations and warranties, either expressed, implied, or statutory, regarding these manufacturers or the use of the
products with any Microsoft technologies. The inclusion of a manufacturer or product does not imply endorsement of
Microsoft of the manufacturer or product. Links are provided to third party sites. Such sites are not under the control of
Microsoft and Microsoft is not responsible for the contents of any linked site or any link contained in a linked site, or any
changes or updates to such sites. Microsoft is not responsible for webcasting or any other form of transmission received
from any linked site. Microsoft is providing these links to you only as a convenience, and the inclusion of any link does not
imply endorsement of Microsoft of the site or the products contained therein.
Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering
subject matter in this document. Except as expressly provided in any written license agreement from Microsoft, the
furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual
property.
Copyright © 2007 Microsoft Corporation. All rights reserved.
Microsoft are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other
countries.
The names of actual companies and products mentioned herein may be the trademarks of their respective owners.
Version 1.2
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 3 of 33
Table of Contents
Lab Introduction ............................................................................................................................................................ 4
Objectives .............................................................................................................4
Prerequisites .........................................................................................................4
Lab Scenarios .......................................................................................................4
Virtual PC Configuration and Setup ....................................................................5
Copy/Paste of Code Required ..............................................................................5
Exercise 1: Model-First Development ......................................................................... 6
Exercise 2: Using Persistence Ignorant Classes ......................................................... 16
Exercise 3: Building Multi-tier Services with Entities................................................... 24
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 4 of 33
Lab Introduction
Each Exercise in this lab is designed to be completed independently if you do not have time
to complete all Exercises in one sitting.
Name BlogModel
Location C:\HOLs\Entity
Framework\Exercise1\
Solution Name Blog
7. Click Add.
8. From the Entity Data Model Wizard, select Empty Model and click Finish. This will add
several references to your project as well as the empty BlogModel.edmx file. You are now
ready to begin adding entities to your model.
9. From the Solution Explorer, double-click on the BlogModel.edmx file to open the Entity Data
Model Designer.
10. Rename your context
Right-click on the designer surface and from the context menu select Properties. From the
property list, set the Entity Container Name to BlogContext
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 8 of 33
11. You will need to display the Toolbox window to add new entities to the model. Click on the
Toolbox link on the designer surface to display the Toolbox window.
12. From the Toolbox window, drag an Entity item to the model designer surface. This will add an
entity named Entity1 to your model. Right click the Entity1 shape and select Properties to
open the Properties window.
13. From the Properties window, set the following properties:
Name Blog
Entity Set Name Blogs
14. From the Entity Data Model Designer, select the Blog entity. Next right click on the Id
property and select Properties. From the Properties window rename the Id member to
BlogID. Also change the Type property to Int32. BlogID is the key for this entity, so set the
Entity Key property to True.
Name Name
Type String
17. Repeat steps 15 and 16 to add another string property named Owner.
Name Owner
Type String
18. You have now added an entity to your model. There are two other entities that need to be
added to the model, one for a Post and one for a Tag. Repeat steps 12 – 16 to add two
additional entities and their properties:
Post Entity
Name Post
Entity Set Name Posts
Properties:
Tag Entity
Name Tag
Entity Set Name Tags
Properties:
19. Now that you have added the entities to the model you can add relationships between these
entities. The first relationship that you will add is between a Blog and a Post. Right click on the
Blog entity and select Add | Association… This will open the Add Association dialog.
20. From the Add Association dialog, fill in the association details of the Blog to Post relationship
using the information below.
Notice the new checkbox titled “Add foreign key properties to the ‘Post’ Entity”. This will add
the necessary foreign key properties to the model and set up the needed referential
constraint. Click OK to add the association.
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 11 of 33
Click OK.
21. Next you will add the relationship between a Post and a Tag. A Post can have many Tags and a
Tag can be associated with many Posts so this is a Many to Many relationship. Right click on
the Post entity and select Add | Association… This will again open the Add Association dialog.
22. From the Add Association dialog, fill in the association details of the Post to Tag relationship
using the information below:
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 12 of 33
Click OK to add the association. Your model will know look like this:
23. The model is now complete and you should save the BlogModel.edmx file by selecting the
menu File | Save BlogModel.edmx.
24. You are now ready to create the database from this model.
Generate 25. To generate a database schema from the model, you will first need to create an empty
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 13 of 33
28. You can now create the database schema for the Blogs database. From BlogModel.edmx
right-click on the designer surface and choose Generate Database from Model… This will
open the Generate Database Wizard.
29. From the Generate Database Wizard, select the connection to the EFBlogs database and
select the “No, exclude sensitive information from the connection string” option. Click Next
to continue to the summary page.
30. From the Summary page you can look over the DDL statements for the database schema.
Notice that foreign keys have been added to the Post and Tags tables and that a PostTags
table has been included as a link table to support the many-to-many relationship between
Posts and Tags. Click Finish to save the .sql file to your project.
31. You will be prompted that this operation will overwrite the msl and ssdl information in your
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 14 of 33
33. Select the database connection that we just created using Server Explorer, and click OK. You
should see a message “The command(s) completed successfully” when your script has finished
creating your new database.
Run the 34. Before you can continue too much farther you need to add some sample Data to our
BlogClient database. To do so, you’re going to run a pre-written SQL script that will add this sample data.
sample.
35. Open the SQL Script to populate the Blog database with data.
Right click on the BlogModel project in Solution Explorer, click Add | Existing Item…
36. From the Add Existing Item dialog, open the file:
C:\HOLs\Entity Framework\Exercise1\BlogData.sql
You may need to select to show All Files (*.*)
37. Click Add.
38. Open BlogData.sql, right click on the editor and select Execute SQL
39. Add the BlogClient project to your Blog solution
From the Solution Explorer, right-click on the solution Solution (‘Blog’) and form the context
menu select Add | Existing Project …
40. From the Add Existing Project dialog, select the project file at:
C:\HOLs\Entity Framework\Exercise1\BlogClient\BlogClient.csproj
41. Set the BlogClient sample as the startup project.
3. From the Open Project dialog, open the solution file at C:\HOLs\Entity
Framework\Exercise2\Blog\Blog.sln
If you are not continuing from Exercise 1, you will need to setup the EFBlog database for this
exercise.
8. Click Connect
10. Add a code file for Blog.cs file to the BlogModel project.
From the Solution Explorer, right click on the BlogModel project and from the context
menu select Add | New Item | Class….
11. Now we will create our POCO objects. Type the name Blog.cs for the class name and click
Add to add the class to your project.
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 18 of 33
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace BlogModel
{
[DataContract(IsReference = true)]
public class Blog
{
[DataMember]
public int BlogID
{
get;
set;
}
[DataMember]
public string Name
{
get;
set;
}
[DataMember]
public string Owner
{
get;
set;
}
[DataMember]
public List<Post> Posts
{
get { return _posts; }
set { _posts = value; }
}
13. Repeat steps 13 – 15 to add code files for the Tag class and Post class
Tag.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace BlogModel
{
[DataContract(IsReference = true)]
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 19 of 33
[DataMember]
public string Name
{
get;
set;
}
[DataMember]
public List<Post> Posts
{
get { return _posts; }
set { _posts = value; }
}
}
}
Post.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace BlogModel
{
[DataContract(IsReference = true)]
public class Post
{
[DataMember]
public int PostID
{
get;
set;
}
[DataMember]
public DateTime CreatedDate
{
get;
set;
}
[DataMember]
public DateTime ModifiedDate
{
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 20 of 33
[DataMember]
public string Title
{
get;
set;
}
[DataMember]
public string PostContent
{
get;
set;
}
[DataMember]
public Blog Blog
{
get;
set;
}
[DataMember]
public int BlogBlogID
{
get;
set;
}
[DataMember]
public List<Tag> Tags
{
get { return _tags; }
set { _tags = value; }
}
}
}
Add a context With code generation turned off we no longer have a BlogContext ObjectContext
class implementation. In this next step, you will create your own BlogContext.
14. Add a code file for BlogContext to the BlogModel project.
From the Solution Explorer, right-click on the BlogModel project, and from the context
menu select Add | New Item | Class….
15. Type the name BlogContext.cs for the class name and click Add to add the class to your
project.
16. When the file opens, type in or copy and paste the following code into the file to define
the BlogContext class.
using System;
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 21 of 33
namespace BlogModel
{
public class BlogContext : ObjectContext
{
public BlogContext()
: base("name=BlogContext", "BlogContext")
{
}
}
}
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 22 of 33
Update the The current POCO implementation uses explicit loading. When performing explicit loads is
classes to use not a concern, it is possible to use lazy loading (also known as deferred loading) to load
lazy loading associated entities whenever a property is accessed for the first time. This is done by
with POCO making relationship navigation properties (such as Blog.Posts or Post.Tags) virtual. The
classes Entity Framework will create a proxy type at runtime that knows how to perform a load
so that no additional code changes are necessary. In the next series of steps you will
enable the use of lazy loading.
18. From the Solution Explorer, double-click on the Blog.cs file in the BlogModel project.
19. Change the Posts property definition to be virtual:
public virtual List<Post> Posts
22. You can now remove contents of the event handler method BlogList_SelectionChanged.
Locate this method, select the method and delete it the contents.
23. Run the application by pressing F5 or selecting the menu item Debug | Start Debugging.
You will see the BlogClient run and you can browse the blogs and posts as before, but this
time you are using persistence ignorant classes that use lazy loading.
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 23 of 33
3. From the Open Project dialog, open the solution file at C:\HOLs\Entity
Framework\Exercise3\Blog\Blog.sln
If you are not continuing from Exercise 2, you will need to setup the EFBlog database for
this exercise.
8. Click Connect
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BlogModel
{
public class BlogRepository
{
BlogContext _context;
13. Next add a business logic method to return posts from a Blog. This repository method
uses the LoadProperty method on the ObjectContext, which is an explicit call to
request the related entities from the database.
14. Add a business logic method to update a post. For now, this implementation will just
call the Validate method.
Update the In this next series of steps, you will update your Blog client to use the BlogRepository.
Blog Client
17. From the Solution Explorer double-click on the MainWindow.xaml.cs file that
to use your
contains the presentation logic to display blogs.
repository
18. At the top of the MainWindow class where the BlogContext is declared. Change the
type from BlogContext to BlogRepository.
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 27 of 33
19. In the MainWindow constructor where _context is assigned and used. Change this
method to create a new BlogRepository and to use the Blogs property by replacing
the code in the constructor with the code below:
public MainWindow()
{
InitializeComponent();
20. Change the UpdateButton_Click method to call the UpdatePost method on the
repository by replacing the code in the method with the code below:
21. Change the BlogList_SelectionChanged method to call the GetPosts method on the
repository by replacing the code in the method with the code below:
Name BlogService
Location C:\HOLs\Entity Framework\Exercise1\Blog
Note: Set the Location to C:\HOLs\Entity Framework\Exercise3\Blog if you are not
continuing from a previous model.
29. The service will be making a connection to the database so you will need to add the
connection string to the app.config file in the BlogService project. In the Solution
Explorer, under the BlogService project, double click on the app.config file to open it.
30. Paste in the connection string tag underneath the configuration tag.
<connectionStrings>
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 29 of 33
In this exercise you will not be using lazy loading so it is important to remove the
virtual Posts property on the Blog class.
31. From the Solution Explorer, double-click on the file Blog.cs in the BlogModel project.
32. Change the Posts property definition to not be virtual:
public List<Post> Posts
using BlogModel;
35. Remove the contents of the IService1 ServiceContract that are pre-filled with sample
operation methods and replace them with the code below. This will define the set of
operations we will use with the repository and context.
[ServiceContract]
public interface IService1
{
[OperationContract]
IEnumerable<Blog> GetBlogs();
[OperationContract]
IEnumerable<Post> GetPosts(Blog blog);
[OperationContract]
string UpdatePost(Post post);
}
using BlogModel;
38. Remove the contents of Service1.cs that are pre-filled with sample operation
methods.
39. Implement GetBlogs
Type in or copy and paste the code below to implement the GetBlogs service method
on Service1. This method creates a new BlogContext and BlogRepository and returns
all of the Blogs.
42. Build your solution by selecting from the menu Build | Build Solution.
Update the 43. Add a service reference to BlogClient
BlogApplica From the Solution Explorer, locate the BlogClient project. Right-click on the
tion to use BlogClient project name, and from the context menu select Add Service Reference
the 44. From the Add Service Reference dialog click on the Discover button.
BlogService 45. Select the service that is found and click OK to add the service reference.
Using the Entity Framework in .NET 4.0 and Visual Studio 2010
Microsoft Hands-on Labs
Page 31 of 33
46. From the Solution Explorer, double-click on the MainWindow.xaml.cs file to open it.
47. Near the top of the file, add this using statement to use the service reference.
using BlogClient.ServiceReference1;
48. MainWindow currently uses the BlogRepository directly. In this step you will replace
that with the service you implemented. Replace the BlogRepository declaration at the
beginning of MainWindow class with a Service1Client declaration.
Service1Client _client;
49. Next replace the constructor for MainWindow with an implementation that
instantiates a new Service1Client and calls the GetBlogs method.
public MainWindow()
{
InitializeComponent();
Update the In this set of steps you will modify the UpdatePosts method on the BlogRepository to save
repository the updated post.
to perform
a save 53. From the Solution Explorer, double-click on the BlogRepository.cs file from the
BlogModel project to open it.
54. Locate the UpdatePost method on line 30 and replace the method contents with the
code below that uses a new Entity Framework method, ChangeObjectState to mark
the entity as modified.
Additional Resources
EF Design Blog