2. Founder and President of the Inland Empire .NET
User’s Group
Three time and current Microsoft MVP – CAD
Software developer by day
Serial netrepreneur by night
4. Entity Framework
Database First
Code First
MVC Scaffolding
5. Version 4 released with .NET 4.0
New version (4.3) allows for model-first, code-first
or database-first development
Maps POCO objects to database objects
A collection of things instead of a dataset of rows
“things” are the entities
6. Why?
◦ Adds a layer of abstraction between database and
code
◦ DBA can structure database how they want
◦ Developer can map to the database how they want
◦ Rename entities for more comfortable use
◦ Entity Framework handles the mappings
7. Entity Data Model – EDM
◦ Deals with the entities and relationships they use
Entities
◦ Instance of EntityType
Specification for a data type which includes a key and
named set of properties
◦ Represent individual instances of the objects
◦ Customer, book, shoe, usergroup
◦ Fully typed
Relationships between look up tables are mapped
as associations in the EDMX
8. csdl
◦ Conceptual Schema Definition Language
◦ The conceputal schema for the EDM
◦ EntityContainer, EntitySet, EntityType definitions
ssdl
◦ Store Schema Definition Language
◦ Schematic representation of the data store
msl
◦ Mapping Specification Language
◦ Sits between the csdl and ssdl and maps the entity
properties
9. Lazy Loading
A design pattern to defer initialization until needed
context.ContextOptions.DeferredLoadingEnabled=true;
List<Member> members = context.Members.ToList();
foreach(var member in members)
{
var memberBooks = member.Books;
}
10. Eager Loading
Use if you will be needing every related entity
List<Member> Members =
context.Members.Include(“Books”).ToList();
foreach(var member in members)
{
var memberBooks = member.Books;
}
11. Contexts
The context is the instance of the entity
Passing an entity around to tiers breaks the context
Just like the song, make sure the context remains
the same
12. Contexts
public class ModelHelper
{
private static Entities _db;
public static Entities Entities
{
get
{
if(_db == null)
_db = new Entities();
return _db;
}
set { _db = value; }
}
}
private readonly Entities _db = new Entities();
13. Contexts
private Member AddMember(Member member, UserGroup group)
{
member.UserGroups.Add(group);
_db.SaveChanges();
}
Doesn’t work because group is in a different context
private Member AddMember(Member member, UserGroup group)
{
var newMember = GetMember(member.Id);
var newGroup = GetUserGroup(group.Id);
newMember.UserGroups.Add(newGroup);
_db.SaveChanges();
}
14. LINQ to Entities
Very similar to LINQ to SQL
Selecting
Member member = _db.Members.Single(x=>x.Id == id);
Deleting
public void DeleteMember(Member member)
{
_db.DeleteObject(member);
_db.SaveChanges();
}
15. LINQ to Entities
Adding (Inserting)
public void AddMember(Member member)
{
_db.AddToMembers(member) //this will be a list
_db.SaveChanges() // of AddTo<Entities>
}
Editing (Updating)
public void EditMember(Member member)
{
_db.Members.Attach(new Member{Id=member.Id});
_db.Members.ApplyCurrentValues(member);
_db.SaveChanges();
}
16. Repositories
Repository pattern encapsulates code into a separate class
Allows for easy changes
Can use it to switch database providers or new technologies
Stephen Walther – ASP.NET MVC Framework, Sams
◦ stephenwalther.com
◦ “Download the code” link
Add the two projects to your solution
Add references to your project
17. Repositories
using GenericRepository
public class MyController
{
private readonly IGenericRepository _repo;
private readonly Entities _db;
public MyController()
{
_repo = new
EFGenericRepository.EFGenericRepository(_db);
}
}
19. Database First
Create the database first
Build tables and relationships
Create Entity Data Model (EDMX) in Visual Studio
Look up tables are converted to Associations
23. Code First – The “Magic Unicorn”
Write code without having to define mappings in XML
Define objects in POCO
No base classes required
Enables database persistence with no configuration
Can use Data Annotations
◦ Key
◦ StringLength
◦ Required
◦ RelatedTo
◦ Etc.
DbContext
◦ Primary object to interact with a database using specific model
DbSet<TEntity>
◦ Used to perform CRUD against a specific type from the model
25. Databases
By default, creates SQL Express DB
◦ <Project>.Models.<Project>Context.mdf
Can switch to SQL Compact
1. NuGet
2. Search for SqlServerCompact
3. Install
Adds System.Data.SqlServerCe to references
26. Databases
Add connection string settings to web.config
Name needs to match context
<add name=“UserGroups”
connectionString=“Data Source=|DataDirectory|UserGroups.sdf”
providerName=“System.Data.SqlServerCe.4.0” />
27. Databases
Run the project
UserGroups.sdf will be created
28. Databases – Keeping Current
Modifying the database
Add setting to Global.asax
Implementation of IDatabaseInitializer
Deletes and recreates the database
29. Databases – Keeping Current
EF 4.3.1 uses Code First Migrations
◦ Enabled by default
◦ Adds table __MigrationHistory to database
Only modifies database if model has changed
35. Scaffolding – Other Commands
-ControllerName
◦ UserGroupsController – look for class “UserGroup”
◦ UserGroup – creates UserGroupsController
-ModelType
◦ Inferred from controller name
◦ Can change name of the model if needed
-Project
◦ Specify the name of the project in multi-project solutions
-CodeLanguage
◦ Specify “cs” or “vb”
-DbContextType
◦ Specify the name of the context
36. Scaffolding – Other Commands
-Repository
◦ Switch. Will generate a repository class for data access
-Area
◦ For putting the generated files in a specific MVC Area
-Layout
◦ Which layout page to use if not default _Layout.cshtml
-Force
◦ Forces overwriting of existing files
-NoChildItems
◦ Will only generate the controller, no views, repositories or data
contexts
37. Scaffolding
Add connection string settings to web.config
Name needs to match context
<add name=“UserGroupsScaffoldingContext”
connectionString=“Data Source=|DataDirectory|UserGroups.sdf”
providerName=“System.Data.SqlServerCe.4.0” />
38. Scaffolding
Run the project
Navigate to /UserGroups/
Database is created
39. Scaffolding
Scaffold the rest of the classes
“Scaffold Controller <ClassName>
Run the project
Database will be modified with new tables
44. Slides are at
◦ http://slidesha.re/EFScaffolding
Inland Empire .NET User’s Group
◦ 2nd Tuesday of each month
◦ www.iedotnetug.org
james@iedotnetug.org
@latringo