la sql

Post on 17-Dec-2014

305 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Entity FrameworkDatabase and Code

FirstJames Johnson, MVP

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

Agenda Entity Framework Database First Code First MVC Scaffolding

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

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

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

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

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

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

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

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

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

Entity FrameworkContexts

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

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

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

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

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

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

}}

Entity FrameworkRepositories

_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

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

Entity FrameworkDatabase First

Entity FrameworkDatabase First

Associations representing look up tables

Members_Books UserGroups_Members

Entity FrameworkDemo

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”

Create classes Create Context Create Controller Write code for

◦ Select◦ Add◦ Update◦ Delete

Create Views

Entity FrameworkCode 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

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” />

Run the project UserGroups.sdf will be created

Entity FrameworkDatabases

Modifying the database Add setting to Global.asax

Entity FrameworkDatabases – Keeping Current

Implementation of IDatabaseInitializer Deletes and recreates the database

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

Entity FrameworkDemo

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

Entity FrameworkScaffolding

Add Class(es) Build Project

Entity FrameworkScaffolding

Package Manager Console “Scaffold Controller <ClassName>

Entity FrameworkScaffolding

Controller and Views are created

Entity FrameworkScaffolding

-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

-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

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” />

Run the project Navigate to /UserGroups/ Database is created

Entity FrameworkScaffolding

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

Entity FrameworkScaffolding

Run the project Database will be modified with new tables

Entity FrameworkScaffolding

Entity FrameworkScaffolding Relationships

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

Using virtual allows EF to use Lazy Loading

Entity FrameworkScaffolding Relationships

Run the project again Database is modified

Look up tables are created

Questions

Thank you

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

top related