SlideShare a Scribd company logo
James 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
Entity Framework Database and Code First
   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
   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 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
   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
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;
}
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;
}
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
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();
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();
}
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();
}
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();
}
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
Repositories
using GenericRepository
public class MyController
{
   private readonly IGenericRepository _repo;
   private readonly Entities _db;

    public MyController()
    {
      _repo = new
       EFGenericRepository.EFGenericRepository(_db);
    }
}
Repositories
_repo.Get<Member>(id); // get

_repo.Edit(member); // edit

_repo.Create(member); // create

_repo.Delete(member); // delete

// list
var list = _repo.List<Member>().Where(x =>
        x.Name.Contains(myName));
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
Database First
Database First




    Members_Books           UserGroups_Members


       Associations representing look up tables
Demo
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
Code First
   Create classes
   Create Context
   Create Controller
   Write code for
    ◦   Select
    ◦   Add
    ◦   Update
    ◦   Delete
   Create Views
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
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” />
Databases
   Run the project
   UserGroups.sdf will be created
Databases – Keeping Current
   Modifying the database
   Add setting to Global.asax




   Implementation of IDatabaseInitializer
   Deletes and recreates the database
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
Demo
Scaffolding
   Create MVC project
   Use NuGet to update EntityFramework
   Package Manager Console “Install-Package MvcScaffolding”
Scaffolding
   Add Class(es)
   Build Project
Scaffolding
   Package Manager Console
   “Scaffold Controller <ClassName>
Scaffolding
   Controller and Views are created
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
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
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” />
Scaffolding
   Run the project
   Navigate to /UserGroups/
   Database is created
Scaffolding
   Scaffold the rest of the classes
   “Scaffold Controller <ClassName>




   Run the project
   Database will be modified with new tables
Scaffolding
Scaffolding Relationships
   It’s not you, it’s me.
   Add relationships to your classes




                                        Using virtual allows EF to
                                        use Lazy Loading
Scaffolding Relationships
   Run the project again
   Database is modified




         Look up tables
           are created
Entity Framework Database and Code First
   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
Ad

Recommended

Introduction to OOP(in java) BY Govind Singh
Introduction to OOP(in java) BY Govind Singh
prabhat engineering college
 
Data Structures (CS8391)
Data Structures (CS8391)
Elavarasi K
 
4. method overloading
4. method overloading
Indu Sharma Bhardwaj
 
Union In language C
Union In language C
Ravi Singh
 
Storage class in C Language
Storage class in C Language
Nitesh Kumar Pandey
 
Looping statements
Looping statements
Chukka Nikhil Chakravarthy
 
Java thread life cycle
Java thread life cycle
Archana Gopinath
 
Union in C programming
Union in C programming
Kamal Acharya
 
Abstract data types
Abstract data types
Poojith Chowdhary
 
Array in c++
Array in c++
Mahesha Mano
 
Pointers, virtual function and polymorphism
Pointers, virtual function and polymorphism
lalithambiga kamaraj
 
Event handling
Event handling
swapnac12
 
Lecture_7-Encapsulation in Java.pptx
Lecture_7-Encapsulation in Java.pptx
ShahinAhmed49
 
Generalization and specialization
Generalization and specialization
Knowledge Center Computer
 
Union in c language
Union in c language
tanmaymodi4
 
Delegates and events
Delegates and events
Gayathri Ganesh
 
Central processing unit
Central processing unit
Kamal Acharya
 
operator overloading & type conversion in cpp
operator overloading & type conversion in cpp
gourav kottawar
 
Typedef
Typedef
vaseemkhn
 
2D Array
2D Array
Swarup Boro
 
screen output and keyboard input in js
screen output and keyboard input in js
chauhankapil
 
Operator in c programming
Operator in c programming
Manoj Tyagi
 
Switch statement, break statement, go to statement
Switch statement, break statement, go to statement
Raj Parekh
 
Classes, objects in JAVA
Classes, objects in JAVA
Abhilash Nair
 
Wrapper classes
Wrapper classes
Ravi_Kant_Sahu
 
Sql injection
Sql injection
Nitish Kumar
 
CS3391 -OOP -UNIT – V NOTES FINAL.pdf
CS3391 -OOP -UNIT – V NOTES FINAL.pdf
AALIM MUHAMMED SALEGH COLLEGE OF ENGINEERING
 
Array Introduction One-dimensional array Multidimensional array
Array Introduction One-dimensional array Multidimensional array
imtiazalijoono
 
Entity Framework - Object Services
Entity Framework - Object Services
Eyal Vardi
 
MVC
MVC
akshin
 

More Related Content

What's hot (20)

Abstract data types
Abstract data types
Poojith Chowdhary
 
Array in c++
Array in c++
Mahesha Mano
 
Pointers, virtual function and polymorphism
Pointers, virtual function and polymorphism
lalithambiga kamaraj
 
Event handling
Event handling
swapnac12
 
Lecture_7-Encapsulation in Java.pptx
Lecture_7-Encapsulation in Java.pptx
ShahinAhmed49
 
Generalization and specialization
Generalization and specialization
Knowledge Center Computer
 
Union in c language
Union in c language
tanmaymodi4
 
Delegates and events
Delegates and events
Gayathri Ganesh
 
Central processing unit
Central processing unit
Kamal Acharya
 
operator overloading & type conversion in cpp
operator overloading & type conversion in cpp
gourav kottawar
 
Typedef
Typedef
vaseemkhn
 
2D Array
2D Array
Swarup Boro
 
screen output and keyboard input in js
screen output and keyboard input in js
chauhankapil
 
Operator in c programming
Operator in c programming
Manoj Tyagi
 
Switch statement, break statement, go to statement
Switch statement, break statement, go to statement
Raj Parekh
 
Classes, objects in JAVA
Classes, objects in JAVA
Abhilash Nair
 
Wrapper classes
Wrapper classes
Ravi_Kant_Sahu
 
Sql injection
Sql injection
Nitish Kumar
 
CS3391 -OOP -UNIT – V NOTES FINAL.pdf
CS3391 -OOP -UNIT – V NOTES FINAL.pdf
AALIM MUHAMMED SALEGH COLLEGE OF ENGINEERING
 
Array Introduction One-dimensional array Multidimensional array
Array Introduction One-dimensional array Multidimensional array
imtiazalijoono
 
Pointers, virtual function and polymorphism
Pointers, virtual function and polymorphism
lalithambiga kamaraj
 
Event handling
Event handling
swapnac12
 
Lecture_7-Encapsulation in Java.pptx
Lecture_7-Encapsulation in Java.pptx
ShahinAhmed49
 
Union in c language
Union in c language
tanmaymodi4
 
Central processing unit
Central processing unit
Kamal Acharya
 
operator overloading & type conversion in cpp
operator overloading & type conversion in cpp
gourav kottawar
 
screen output and keyboard input in js
screen output and keyboard input in js
chauhankapil
 
Operator in c programming
Operator in c programming
Manoj Tyagi
 
Switch statement, break statement, go to statement
Switch statement, break statement, go to statement
Raj Parekh
 
Classes, objects in JAVA
Classes, objects in JAVA
Abhilash Nair
 
Array Introduction One-dimensional array Multidimensional array
Array Introduction One-dimensional array Multidimensional array
imtiazalijoono
 

Viewers also liked (8)

Entity Framework - Object Services
Entity Framework - Object Services
Eyal Vardi
 
MVC
MVC
akshin
 
Getting started with entity framework
Getting started with entity framework
Lushanthan Sivaneasharajah
 
Learn Entity Framework in a day with Code First, Model First and Database First
Learn Entity Framework in a day with Code First, Model First and Database First
Jibran Rasheed Khan
 
Introducing Entity Framework 4.0
Introducing Entity Framework 4.0
Bishoy Demian
 
Repository and Unit Of Work Design Patterns
Repository and Unit Of Work Design Patterns
Hatim Hakeel
 
Generic repository pattern with ASP.NET MVC and Entity Framework
Generic repository pattern with ASP.NET MVC and Entity Framework
Md. Mahedee Hasan
 
ASP.NET MVC Presentation
ASP.NET MVC Presentation
ivpol
 
Entity Framework - Object Services
Entity Framework - Object Services
Eyal Vardi
 
Learn Entity Framework in a day with Code First, Model First and Database First
Learn Entity Framework in a day with Code First, Model First and Database First
Jibran Rasheed Khan
 
Introducing Entity Framework 4.0
Introducing Entity Framework 4.0
Bishoy Demian
 
Repository and Unit Of Work Design Patterns
Repository and Unit Of Work Design Patterns
Hatim Hakeel
 
Generic repository pattern with ASP.NET MVC and Entity Framework
Generic repository pattern with ASP.NET MVC and Entity Framework
Md. Mahedee Hasan
 
ASP.NET MVC Presentation
ASP.NET MVC Presentation
ivpol
 
Ad

Similar to Entity Framework Database and Code First (20)

Real World MVC
Real World MVC
James Johnson
 
Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)
David McCarter
 
Intro to Core Data
Intro to Core Data
Make School
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial En
Ankur Dongre
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial En
Ankur Dongre
 
MVC and Entity Framework 4
MVC and Entity Framework 4
James Johnson
 
Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)
David McCarter
 
PostgreSQL, MongoDb, Express, React, Structured
PostgreSQL, MongoDb, Express, React, Structured
priya951125
 
Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015
Svetlin Nakov
 
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
dotNet Miami
 
Entity Framework: Code First and Magic Unicorns
Entity Framework: Code First and Magic Unicorns
Richie Rump
 
Local storage in Web apps
Local storage in Web apps
Ivano Malavolta
 
Local Storage
Local Storage
Ivano Malavolta
 
Microsoft Entity Framework
Microsoft Entity Framework
Mahmoud Tolba
 
MVC and Entity Framework
MVC and Entity Framework
James Johnson
 
ASP.Net Presentation Part2
ASP.Net Presentation Part2
Neeraj Mathur
 
05 entity framework
05 entity framework
glubox
 
Practical OData
Practical OData
Vagif Abilov
 
Core data in Swfit
Core data in Swfit
allanh0526
 
Local data storage for mobile apps
Local data storage for mobile apps
Ivano Malavolta
 
Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)
David McCarter
 
Intro to Core Data
Intro to Core Data
Make School
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial En
Ankur Dongre
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial En
Ankur Dongre
 
MVC and Entity Framework 4
MVC and Entity Framework 4
James Johnson
 
Building nTier Applications with Entity Framework Services (Part 1)
Building nTier Applications with Entity Framework Services (Part 1)
David McCarter
 
PostgreSQL, MongoDb, Express, React, Structured
PostgreSQL, MongoDb, Express, React, Structured
priya951125
 
Entity Framework: Nakov @ BFU Hackhaton 2015
Entity Framework: Nakov @ BFU Hackhaton 2015
Svetlin Nakov
 
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
dotNet Miami
 
Entity Framework: Code First and Magic Unicorns
Entity Framework: Code First and Magic Unicorns
Richie Rump
 
Local storage in Web apps
Local storage in Web apps
Ivano Malavolta
 
Microsoft Entity Framework
Microsoft Entity Framework
Mahmoud Tolba
 
MVC and Entity Framework
MVC and Entity Framework
James Johnson
 
ASP.Net Presentation Part2
ASP.Net Presentation Part2
Neeraj Mathur
 
05 entity framework
05 entity framework
glubox
 
Core data in Swfit
Core data in Swfit
allanh0526
 
Local data storage for mobile apps
Local data storage for mobile apps
Ivano Malavolta
 
Ad

More from James Johnson (6)

A Rich Web experience with jQuery, Ajax and .NET
A Rich Web experience with jQuery, Ajax and .NET
James Johnson
 
A Rich Web Experience with jQuery, Ajax and .NET
A Rich Web Experience with jQuery, Ajax and .NET
James Johnson
 
La sql
La sql
James Johnson
 
ASP.NET MVC and Entity Framework 4
ASP.NET MVC and Entity Framework 4
James Johnson
 
MVC and Entity Framework 4
MVC and Entity Framework 4
James Johnson
 
Introduction to jQuery
Introduction to jQuery
James Johnson
 
A Rich Web experience with jQuery, Ajax and .NET
A Rich Web experience with jQuery, Ajax and .NET
James Johnson
 
A Rich Web Experience with jQuery, Ajax and .NET
A Rich Web Experience with jQuery, Ajax and .NET
James Johnson
 
ASP.NET MVC and Entity Framework 4
ASP.NET MVC and Entity Framework 4
James Johnson
 
MVC and Entity Framework 4
MVC and Entity Framework 4
James Johnson
 
Introduction to jQuery
Introduction to jQuery
James Johnson
 

Recently uploaded (20)

Quantum AI: Where Impossible Becomes Probable
Quantum AI: Where Impossible Becomes Probable
Saikat Basu
 
AI Agents and FME: A How-to Guide on Generating Synthetic Metadata
AI Agents and FME: A How-to Guide on Generating Synthetic Metadata
Safe Software
 
2025_06_18 - OpenMetadata Community Meeting.pdf
2025_06_18 - OpenMetadata Community Meeting.pdf
OpenMetadata
 
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
Earley Information Science
 
"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
Connecting Data and Intelligence: The Role of FME in Machine Learning
Connecting Data and Intelligence: The Role of FME in Machine Learning
Safe Software
 
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
revolcs10
 
WebdriverIO & JavaScript: The Perfect Duo for Web Automation
WebdriverIO & JavaScript: The Perfect Duo for Web Automation
digitaljignect
 
PyCon SG 25 - Firecracker Made Easy with Python.pdf
PyCon SG 25 - Firecracker Made Easy with Python.pdf
Muhammad Yuga Nugraha
 
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
caoyixuan2019
 
Security Tips for Enterprise Azure Solutions
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
Edge AI and Vision Alliance
 
Securing Account Lifecycles in the Age of Deepfakes.pptx
Securing Account Lifecycles in the Age of Deepfakes.pptx
FIDO Alliance
 
Hyderabad MuleSoft In-Person Meetup (June 21, 2025) Slides
Hyderabad MuleSoft In-Person Meetup (June 21, 2025) Slides
Ravi Tamada
 
"Database isolation: how we deal with hundreds of direct connections to the d...
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
The Growing Value and Application of FME & GenAI
The Growing Value and Application of FME & GenAI
Safe Software
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
You are not excused! How to avoid security blind spots on the way to production
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 
Quantum AI: Where Impossible Becomes Probable
Quantum AI: Where Impossible Becomes Probable
Saikat Basu
 
AI Agents and FME: A How-to Guide on Generating Synthetic Metadata
AI Agents and FME: A How-to Guide on Generating Synthetic Metadata
Safe Software
 
2025_06_18 - OpenMetadata Community Meeting.pdf
2025_06_18 - OpenMetadata Community Meeting.pdf
OpenMetadata
 
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
Earley Information Science
 
"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
Connecting Data and Intelligence: The Role of FME in Machine Learning
Connecting Data and Intelligence: The Role of FME in Machine Learning
Safe Software
 
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
revolcs10
 
WebdriverIO & JavaScript: The Perfect Duo for Web Automation
WebdriverIO & JavaScript: The Perfect Duo for Web Automation
digitaljignect
 
PyCon SG 25 - Firecracker Made Easy with Python.pdf
PyCon SG 25 - Firecracker Made Easy with Python.pdf
Muhammad Yuga Nugraha
 
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
caoyixuan2019
 
Security Tips for Enterprise Azure Solutions
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
Edge AI and Vision Alliance
 
Securing Account Lifecycles in the Age of Deepfakes.pptx
Securing Account Lifecycles in the Age of Deepfakes.pptx
FIDO Alliance
 
Hyderabad MuleSoft In-Person Meetup (June 21, 2025) Slides
Hyderabad MuleSoft In-Person Meetup (June 21, 2025) Slides
Ravi Tamada
 
"Database isolation: how we deal with hundreds of direct connections to the d...
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
The Growing Value and Application of FME & GenAI
The Growing Value and Application of FME & GenAI
Safe Software
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
You are not excused! How to avoid security blind spots on the way to production
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 

Entity Framework Database and Code First

  • 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); } }
  • 18. Repositories _repo.Get<Member>(id); // get _repo.Edit(member); // edit _repo.Create(member); // create _repo.Delete(member); // delete // list var list = _repo.List<Member>().Where(x => x.Name.Contains(myName));
  • 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
  • 21. Database First Members_Books UserGroups_Members Associations representing look up tables
  • 22. Demo
  • 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
  • 24. Code First  Create classes  Create Context  Create Controller  Write code for ◦ Select ◦ Add ◦ Update ◦ Delete  Create Views
  • 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
  • 30. Demo
  • 31. Scaffolding  Create MVC project  Use NuGet to update EntityFramework  Package Manager Console “Install-Package MvcScaffolding”
  • 32. Scaffolding  Add Class(es)  Build Project
  • 33. Scaffolding  Package Manager Console  “Scaffold Controller <ClassName>
  • 34. Scaffolding  Controller and Views are created
  • 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
  • 41. Scaffolding Relationships  It’s not you, it’s me.  Add relationships to your classes Using virtual allows EF to use Lazy Loading
  • 42. Scaffolding Relationships  Run the project again  Database is modified Look up tables are created
  • 44. Slides are at ◦ http://slidesha.re/EFScaffolding  Inland Empire .NET User’s Group ◦ 2nd Tuesday of each month ◦ www.iedotnetug.org  [email protected]  @latringo