Entity Framework Database and Code First

44
Entity Framework Database and Code First James Johnson, MVP

description

Slide deck presented to LA SQL Developers Group on Thursday, March 15, 2012

Transcript of Entity Framework Database and Code First

Page 1: Entity Framework Database and Code First

Entity FrameworkDatabase and Code

FirstJames Johnson, MVP

Page 2: Entity Framework Database and Code First

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

Who I am

Page 3: Entity Framework Database and Code First
Page 4: Entity Framework Database and Code First

Agenda Entity Framework Database First Code First MVC Scaffolding

Page 5: Entity Framework Database and Code First

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

Entity Framework

Page 6: Entity Framework Database and Code First

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

Entity Framework

Page 7: Entity Framework Database and Code First

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

Entity Framework

Page 8: Entity Framework Database and Code First

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

Entity Framework

Page 9: Entity Framework Database and Code First

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;

}

Entity FrameworkLazy Loading

Page 10: Entity Framework Database and Code First

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;

}

Entity FrameworkEager Loading

Page 11: Entity Framework Database and Code First

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

Entity FrameworkContexts

Page 12: Entity Framework Database and Code First

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();

Entity FrameworkContexts

Page 13: Entity Framework Database and Code First

private Member AddMember(Member member, UserGroup group){ member.UserGroups.Add(group); _db.SaveChanges();}

Entity FrameworkContexts

Doesn’t work because group is in a different contextprivate Member AddMember(Member member, UserGroup group){ var newMember = GetMember(member.Id); var newGroup = GetUserGroup(group.Id); newMember.UserGroups.Add(newGroup); _db.SaveChanges();}

Page 14: Entity Framework Database and Code First

Very similar to LINQ to SQL

SelectingMember member = _db.Members.Single(x=>x.Id == id);

Deletingpublic void DeleteMember(Member member){_db.DeleteObject(member);_db.SaveChanges();

}

Entity FrameworkLINQ to Entities

Page 15: Entity Framework Database and Code First

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();}

Entity FrameworkLINQ to Entities

Page 16: Entity Framework Database and Code First

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

Entity FrameworkRepositories

Page 17: Entity Framework Database and Code First

using GenericRepositorypublic class MyController{ private readonly IGenericRepository _repo; private readonly Entities _db;

public MyController() { _repo = new EFGenericRepository.EFGenericRepository(_db);

}}

Entity FrameworkRepositories

Page 18: Entity Framework Database and Code First

_repo.Get<Member>(id); // get

_repo.Edit(member); // edit

_repo.Create(member); // create

_repo.Delete(member); // delete

// listvar list = _repo.List<Member>().Where(x =>

x.Name.Contains(myName));

Entity FrameworkRepositories

Page 19: Entity Framework Database and Code First

Create the database first Build tables and relationships Create Entity Data Model (EDMX) in Visual Studio Look up tables are converted to Associations

Entity FrameworkDatabase First

Page 20: Entity Framework Database and Code First

Entity FrameworkDatabase First

Page 21: Entity Framework Database and Code First

Entity FrameworkDatabase First

Associations representing look up tables

Members_Books UserGroups_Members

Page 22: Entity Framework Database and Code First

Entity FrameworkDemo

Page 23: Entity Framework Database and Code First

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

Entity FrameworkCode First – The “Magic Unicorn”

Page 24: Entity Framework Database and Code First

Create classes Create Context Create Controller Write code for

◦ Select◦ Add◦ Update◦ Delete

Create Views

Entity FrameworkCode First

Page 25: Entity Framework Database and Code First

By default, creates SQL Express DB◦ <Project>.Models.<Project>Context.mdf

Can switch to SQL Compact

1. NuGet2. Search for SqlServerCompact3. Install

Adds System.Data.SqlServerCe to references

Entity FrameworkDatabases

Page 26: Entity Framework Database and Code First

Add connection string settings to web.config Name needs to match context

Entity FrameworkDatabases

<add name=“UserGroups”connectionString=“Data Source=|DataDirectory|UserGroups.sdf”providerName=“System.Data.SqlServerCe.4.0” />

Page 27: Entity Framework Database and Code First

Run the project UserGroups.sdf will be created

Entity FrameworkDatabases

Page 28: Entity Framework Database and Code First

Modifying the database Add setting to Global.asax

Entity FrameworkDatabases – Keeping Current

Implementation of IDatabaseInitializer Deletes and recreates the database

Page 29: Entity Framework Database and Code First

EF 4.3.1 uses Code First Migrations◦ Enabled by default◦ Adds table __MigrationHistory to database

Only modifies database if model has changed

Entity FrameworkDatabases – Keeping Current

Page 30: Entity Framework Database and Code First

Entity FrameworkDemo

Page 31: Entity Framework Database and Code First

Create MVC project Use NuGet to update EntityFramework Package Manager Console “Install-Package MvcScaffolding”

Entity FrameworkScaffolding

Page 32: Entity Framework Database and Code First

Add Class(es) Build Project

Entity FrameworkScaffolding

Page 33: Entity Framework Database and Code First

Package Manager Console “Scaffold Controller <ClassName>

Entity FrameworkScaffolding

Page 34: Entity Framework Database and Code First

Controller and Views are created

Entity FrameworkScaffolding

Page 35: Entity Framework Database and Code First

-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

Entity FrameworkScaffolding – Other Commands

Page 36: Entity Framework Database and Code First

-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

Entity FrameworkScaffolding – Other Commands

Page 37: Entity Framework Database and Code First

Add connection string settings to web.config Name needs to match context

Entity FrameworkScaffolding

<add name=“UserGroupsScaffoldingContext”connectionString=“Data Source=|DataDirectory|UserGroups.sdf”providerName=“System.Data.SqlServerCe.4.0” />

Page 38: Entity Framework Database and Code First

Run the project Navigate to /UserGroups/ Database is created

Entity FrameworkScaffolding

Page 39: Entity Framework Database and Code First

Scaffold the rest of the classes “Scaffold Controller <ClassName>

Entity FrameworkScaffolding

Run the project Database will be modified with new tables

Page 40: Entity Framework Database and Code First

Entity FrameworkScaffolding

Page 41: Entity Framework Database and Code First

Entity FrameworkScaffolding Relationships

It’s not you, it’s me. Add relationships to your classes

Using virtual allows EF to use Lazy Loading

Page 42: Entity Framework Database and Code First

Entity FrameworkScaffolding Relationships

Run the project again Database is modified

Look up tables are created

Page 43: Entity Framework Database and Code First

Questions

Page 44: Entity Framework Database and Code First

Thank you

Slides are at◦http://slidesha.re/EFScaffolding

Inland Empire .NET User’s Group◦2nd Tuesday of each month◦www.iedotnetug.org

[email protected] @latringo