SlideShare a Scribd company logo
Richie Rump
      @Jorriss
www.jorriss.net
Entity Framework: Code First and Magic Unicorns
• Object-Relational Mapping Framework
• Allows developers to retrieve database
  data from an object model.
• Converts object data into relational data
• Uses your classes
• Generates SQL
Entity Framework: Code First and Magic Unicorns
• Code First Model
• DbContext
• Fluent API
• Bug Fixes
• Semantic Versioning
Because Entity Framework 4.2 is better
than:
Entity Framework 4.1 Service Pack 2
Update 1 Refresh Release To Web Pack
•   Code First Migrations
•   Data Annotations on non-public properties
•   Additional configuration file settings
•   Removal of EdmMetadata table
•   Bug Fixes
• Added –IgnoreChanges to enable CodeFirst
  against existing database.
• More inevitable bug fixes.
EF 4.3.1 – Bug Fixes

      EF 4.3 - Migrations

      EF 4.2 – Bug Fixes

EF 4.1 - Code First & DbContext


 Entity Framework 4.0
    included with .Net 4.0
Design First                                  Code First

                        Model First                                Code First
                        Create .edmx model in designer             Define classes & mapping in code
       New              Generate DB from .edmx                     Database auto-created at
     Database           Classes auto-generate from                   runtime
                          .edmx


                        Database First                             Code First
                        Reverse engineer .edmx model               Define classes & mapping in code
      Existing          Classes auto-generate from
     Database             .edmx




Adapted from Programming Entity Framework: Code First by Julie Learman and Rowan Miller page 3.
Lovingly stolen from Programming Entity Framework: Code First by Julie Lerman and Rowan Miller page 9.
In a word: Nuget
• What does code look like?
• How do we use it?
• Stop! Demo time.
• Convention over configuration
  – Database naming
  – Primary Key
• SQL Server Express – default database
• dbContext Class
• It’s not enough to use convention.
• Tells EF how to map the object model to the
  database model.
• Place annotations directly against the
  property in your class.
• System.ComponentModel.DataAnnotations
•   Key – Defines a Primary Key
•   Column – Defines DB column name
•   Table – Defines table name for a class
•   Required – Defines a Required DB field
•   NotMapped – Property not in DB mapping
•   MinLength() – Min length for a property
•   MaximumLength() – Max length for property
•   Range() – Defines a valid value range
[Table(“Product_Order")]
public class Order
{
    [Key]
    [Column("Order_ID")]
    public int OrderId { get; set; }
    public DateTime Date { get; set; }
    public OrderState State { get; set; }
    public string Item { get; set; }
    [Range(1, 25)]
    public int Quantity { get; set; }
    [MinLength(3, ErrorMessage="What are you thinking?")]
    [MaxLength(50, ErrorMessage="ERROR!! FAILZ!!!!")]
    public string Name { get; set; }
    [NotMapped]
    public string Note { get; set; }
}
• Allows you to configure EF without polluting
  your classes with annotations.
• Cleaner code
• Can have all EF mapping code in one file.
• Some things you can only do in the Fluent API
Data Annotations
[Column("Order_ID")]
public int Id { get; set; }



Fluent API
modelBuilder.Entity<Order>()
  .Property(p => p.Id).HasColumnName("Order_ID");
• This time it will work…I swear!
• Expressed via the navigation properties in
  your classes
public class Order
{
        public int Id { get; set; }
        public OrderState State { get; set; }
}
Entity Framework: Code First and Magic Unicorns
public class Order
 {
    public int Id { get; set; }
    public int OrderStateID { get; set; }
    public OrderState State { get; set; }
 }


public class OrderState
{
   public int Id { get; set; }
}


public OrderConfiguration()
{
    ToTable("Order");
    Property(p => p.OrderStateID).HasColumnName("Order_State_ID");
    HasRequired(p => p.State).WithMany()
      .HasForeignKey(f => f.OrderStateID);
}
Entity Framework: Code First and Magic Unicorns
public class Order
 {
    public int Id { get; set; }
    public int PersonID { get; set; }
    public virtual Person SalesPerson { get; set; }
 }

 public class Person
 {
    public int PersonID { get; set; }
    ...
    public List<Order> Orders { get; set; }
 }

public OrderConfiguration()
{
    ToTable("Order");
    Property(p => p.PersonID).HasColumnName("Person_ID");
    HasRequired(p => p.SalesPerson).WithMany(t => t.Orders)
      .HasForeignKey(f => f.PersonID);
}
Entity Framework: Code First and Magic Unicorns
public class Order
{
   public int Id { get; set; }
   ...
   public List<Item> Items { get; set; }
}

public class Item
{
   public int Id { get; set; }
   ...
   public List<Order> Orders { get; set; }
}

HasMany(p => p.Items).WithMany(t => t.Orders)
  .Map(m =>
  {
     m.ToTable("Order_Item");
     m.MapLeftKey("Order_ID");
     m.MapRightKey("Item_ID");
  });
• New way to interact with EF objects
• Makes interaction with EF MUCH simpler
• Encapsulates existing EF objects such as
  ObjectContext, ObjectSet and ObjectQuery
• DbContext – Provides facilities querying and
  persisting object changes.
• DbSet – Represents an entity for CRUD
  operations
• Change Tracker API and Validation API are
  other features
EFTestContext context = new EFTestContext();

var query = context.Orders
            .Where(c => c.PersonID == 22)
            .Include(c => c.State)
            .ToList();




List<Order> orders = context.Orders.ToList();
• Easy way to retrieve an object via the Primary
  Key.

EFTestContext context = new EFTestContext();
Person p = context.People.Find(1);
EFTestContext context = new EFTestContext();
Person p = new Person { FirstName = "Testy", LastName = "User" };
context.People.Add(p);
context.SaveChanges();
EFTestContext context = new EFTestContext();
Person p = context.People.Find(1);
context.People.Remove(p);
context.SaveChanges();
• Migrations is a new way to generate database
  changes automatically
• It’s controlled through PowerShell commands
• Can migrate forward or rollback DB changes.
• Migrations can be handled automatically. EF
  will automatically apply change scripts
• To turn Migrations on

PM> Enable-Migrations


• This creates a Migration folder in project
• Creates Configuration.cs file
• Creates __MigrationHistory system table in DB
PM> Add-Migration "Inital" -IgnoreChanges


• “Initial” is the name of the migration
• The –IgnoreChanges switch tells EF to create an
  empty migration. Use this if this is the first
  migration and EF did not create the DB.
• Creates a cs file with the changes since the last
  migration.
• Does not apply changes to DB.
PM> Update-Database


• Pushes the migration changes to the DB
• Use the –script switch to have EF create a SQL
  script of the changes.
• Use –TargetMigration to determine end point for
  DB. (Rollback/Forward)
• Be careful. I wouldn’t run against a production DB.
Y U NO DO DATABASE RIGHT?!?!?!!!
• Now in beta
• Install using Nuget
    Install-Package EntityFramework –Pre
•   ENUMS!
•   Performance Improvements
•   Spatial Data Types
•   Table-Valued Functions
•   Most features only in .Net 4.5
Entity Framework: Code First and Magic Unicorns
• Julie Lerman’s Blog
      http://thedatafarm.com/blog/
• Rowan Miller’s Blog
      http://romiller.com
• Arthur Vicker’s Blog
      http://blog.oneunicorn.com
• #efhelp on twitter
• StackOverflow (of course)
• PluralSite – Julie Lerman’s EF videos
Richie Rump
@Jorriss
http://jorriss.net
http://dotnetmiami.com

More Related Content

PPTX
Getting started with entity framework
PPTX
Entity Framework Database and Code First
PPTX
Ef code first
PPTX
Entity framework
PPTX
Entity framework code first
PDF
Learn Entity Framework in a day with Code First, Model First and Database First
PPT
ADO.NET Entity Framework
PPTX
Introducing Entity Framework 4.0
Getting started with entity framework
Entity Framework Database and Code First
Ef code first
Entity framework
Entity framework code first
Learn Entity Framework in a day with Code First, Model First and Database First
ADO.NET Entity Framework
Introducing Entity Framework 4.0

What's hot (20)

PPTX
Entity Framework
PPTX
Entity Framework Overview
PPTX
Entity Framework 4
PPTX
Entity framework and how to use it
PPTX
Entity Framework: Nakov @ BFU Hackhaton 2015
KEY
Introducing the Entity Framework
PPTX
Entity framework 6
PPTX
Entity Framework v2 Best Practices
PPTX
Building nTier Applications with Entity Framework Services
PPTX
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
PPT
Introduction to Hibernate
PPTX
Building nTier Applications with Entity Framework Services (Part 1)
PPTX
Linq
PDF
Intro to Core Data
PPTX
Spring Data - Intro (Odessa Java TechTalks)
PPTX
Entity Framework v1 and v2
PPTX
Hibernate ppt
PPTX
Microsoft Entity Framework
PPTX
Lerman Vvs14 Ef Tips And Tricks
PPT
ASP.NET 09 - ADO.NET
Entity Framework
Entity Framework Overview
Entity Framework 4
Entity framework and how to use it
Entity Framework: Nakov @ BFU Hackhaton 2015
Introducing the Entity Framework
Entity framework 6
Entity Framework v2 Best Practices
Building nTier Applications with Entity Framework Services
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
Introduction to Hibernate
Building nTier Applications with Entity Framework Services (Part 1)
Linq
Intro to Core Data
Spring Data - Intro (Odessa Java TechTalks)
Entity Framework v1 and v2
Hibernate ppt
Microsoft Entity Framework
Lerman Vvs14 Ef Tips And Tricks
ASP.NET 09 - ADO.NET
Ad

Viewers also liked (14)

PPTX
Entity Framework 6 for developers, Code-First!
PPTX
Entity Framework Core & Micro-Orms with Asp.Net Core
PDF
Feedback Loops...to infinity, and beyond!
PDF
Getting started with entity framework 6 code first using mvc 5
PPT
ADO.NET Entity Framework
PPTX
MVC 6 - Tag Helpers and View Components
PPTX
Improve your web dev workflow in Visual Studio
PPTX
04 - [ASP.NET Core] Entity Framework Core
PDF
Repository and Unit Of Work Design Patterns
PPTX
Orms vs Micro-ORMs
PPTX
State of entity framework
PPT
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
PDF
Intake 37 ef1
PDF
Intake 37 ef2
Entity Framework 6 for developers, Code-First!
Entity Framework Core & Micro-Orms with Asp.Net Core
Feedback Loops...to infinity, and beyond!
Getting started with entity framework 6 code first using mvc 5
ADO.NET Entity Framework
MVC 6 - Tag Helpers and View Components
Improve your web dev workflow in Visual Studio
04 - [ASP.NET Core] Entity Framework Core
Repository and Unit Of Work Design Patterns
Orms vs Micro-ORMs
State of entity framework
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Intake 37 ef1
Intake 37 ef2
Ad

Similar to Entity Framework: Code First and Magic Unicorns (20)

PPTX
02 beginning code first
PPTX
02 beginning code first
PPTX
Real World MVC
PDF
ITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdf
PPTX
Webinar: What's new in the .NET Driver
PDF
Access Data from XPages with the Relational Controls
PPTX
PPTX
05 entity framework
PDF
Data Migrations in the App Engine Datastore
PPT
What's New for Data?
PDF
9 Python programming notes for ktu physics and computer application semester 4
PPTX
Jdbc Java Programming
PPT
Entity framework 4.0
PDF
JavaScript - Chapter 12 - Document Object Model
PPTX
jdbcppt.pptx , jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt
PPTX
jdbcppt.pptx , jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt
PPTX
05 entity framework
PPTX
Lerman Adx303 Entity Framework 4 In Aspnet
PDF
Modern, Scalable, Ambitious apps with Ember.js
PPTX
Generating Code with Oracle SQL Developer Data Modeler
02 beginning code first
02 beginning code first
Real World MVC
ITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdf
Webinar: What's new in the .NET Driver
Access Data from XPages with the Relational Controls
05 entity framework
Data Migrations in the App Engine Datastore
What's New for Data?
9 Python programming notes for ktu physics and computer application semester 4
Jdbc Java Programming
Entity framework 4.0
JavaScript - Chapter 12 - Document Object Model
jdbcppt.pptx , jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt
jdbcppt.pptx , jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt jdbc ppt
05 entity framework
Lerman Adx303 Entity Framework 4 In Aspnet
Modern, Scalable, Ambitious apps with Ember.js
Generating Code with Oracle SQL Developer Data Modeler

Recently uploaded (20)

PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Machine learning based COVID-19 study performance prediction
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPT
Teaching material agriculture food technology
PPTX
Cloud computing and distributed systems.
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
Approach and Philosophy of On baking technology
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Review of recent advances in non-invasive hemoglobin estimation
Per capita expenditure prediction using model stacking based on satellite ima...
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
The AUB Centre for AI in Media Proposal.docx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Dropbox Q2 2025 Financial Results & Investor Presentation
Understanding_Digital_Forensics_Presentation.pptx
Machine learning based COVID-19 study performance prediction
Agricultural_Statistics_at_a_Glance_2022_0.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Teaching material agriculture food technology
Cloud computing and distributed systems.
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
sap open course for s4hana steps from ECC to s4
Chapter 3 Spatial Domain Image Processing.pdf
Big Data Technologies - Introduction.pptx
Approach and Philosophy of On baking technology
20250228 LYD VKU AI Blended-Learning.pptx
Network Security Unit 5.pdf for BCA BBA.
Review of recent advances in non-invasive hemoglobin estimation

Entity Framework: Code First and Magic Unicorns

  • 1. Richie Rump @Jorriss www.jorriss.net
  • 3. • Object-Relational Mapping Framework • Allows developers to retrieve database data from an object model. • Converts object data into relational data • Uses your classes • Generates SQL
  • 5. • Code First Model • DbContext • Fluent API
  • 6. • Bug Fixes • Semantic Versioning Because Entity Framework 4.2 is better than: Entity Framework 4.1 Service Pack 2 Update 1 Refresh Release To Web Pack
  • 7. Code First Migrations • Data Annotations on non-public properties • Additional configuration file settings • Removal of EdmMetadata table • Bug Fixes
  • 8. • Added –IgnoreChanges to enable CodeFirst against existing database. • More inevitable bug fixes.
  • 9. EF 4.3.1 – Bug Fixes EF 4.3 - Migrations EF 4.2 – Bug Fixes EF 4.1 - Code First & DbContext Entity Framework 4.0 included with .Net 4.0
  • 10. Design First Code First Model First Code First Create .edmx model in designer Define classes & mapping in code New Generate DB from .edmx Database auto-created at Database Classes auto-generate from runtime .edmx Database First Code First Reverse engineer .edmx model Define classes & mapping in code Existing Classes auto-generate from Database .edmx Adapted from Programming Entity Framework: Code First by Julie Learman and Rowan Miller page 3.
  • 11. Lovingly stolen from Programming Entity Framework: Code First by Julie Lerman and Rowan Miller page 9.
  • 12. In a word: Nuget
  • 13. • What does code look like? • How do we use it? • Stop! Demo time.
  • 14. • Convention over configuration – Database naming – Primary Key • SQL Server Express – default database • dbContext Class
  • 15. • It’s not enough to use convention. • Tells EF how to map the object model to the database model. • Place annotations directly against the property in your class. • System.ComponentModel.DataAnnotations
  • 16. Key – Defines a Primary Key • Column – Defines DB column name • Table – Defines table name for a class • Required – Defines a Required DB field • NotMapped – Property not in DB mapping • MinLength() – Min length for a property • MaximumLength() – Max length for property • Range() – Defines a valid value range
  • 17. [Table(“Product_Order")] public class Order { [Key] [Column("Order_ID")] public int OrderId { get; set; } public DateTime Date { get; set; } public OrderState State { get; set; } public string Item { get; set; } [Range(1, 25)] public int Quantity { get; set; } [MinLength(3, ErrorMessage="What are you thinking?")] [MaxLength(50, ErrorMessage="ERROR!! FAILZ!!!!")] public string Name { get; set; } [NotMapped] public string Note { get; set; } }
  • 18. • Allows you to configure EF without polluting your classes with annotations. • Cleaner code • Can have all EF mapping code in one file. • Some things you can only do in the Fluent API
  • 19. Data Annotations [Column("Order_ID")] public int Id { get; set; } Fluent API modelBuilder.Entity<Order>() .Property(p => p.Id).HasColumnName("Order_ID");
  • 20. • This time it will work…I swear!
  • 21. • Expressed via the navigation properties in your classes public class Order { public int Id { get; set; } public OrderState State { get; set; } }
  • 23. public class Order { public int Id { get; set; } public int OrderStateID { get; set; } public OrderState State { get; set; } } public class OrderState { public int Id { get; set; } } public OrderConfiguration() { ToTable("Order"); Property(p => p.OrderStateID).HasColumnName("Order_State_ID"); HasRequired(p => p.State).WithMany() .HasForeignKey(f => f.OrderStateID); }
  • 25. public class Order { public int Id { get; set; } public int PersonID { get; set; } public virtual Person SalesPerson { get; set; } } public class Person { public int PersonID { get; set; } ... public List<Order> Orders { get; set; } } public OrderConfiguration() { ToTable("Order"); Property(p => p.PersonID).HasColumnName("Person_ID"); HasRequired(p => p.SalesPerson).WithMany(t => t.Orders) .HasForeignKey(f => f.PersonID); }
  • 27. public class Order { public int Id { get; set; } ... public List<Item> Items { get; set; } } public class Item { public int Id { get; set; } ... public List<Order> Orders { get; set; } } HasMany(p => p.Items).WithMany(t => t.Orders) .Map(m => { m.ToTable("Order_Item"); m.MapLeftKey("Order_ID"); m.MapRightKey("Item_ID"); });
  • 28. • New way to interact with EF objects • Makes interaction with EF MUCH simpler • Encapsulates existing EF objects such as ObjectContext, ObjectSet and ObjectQuery
  • 29. • DbContext – Provides facilities querying and persisting object changes. • DbSet – Represents an entity for CRUD operations • Change Tracker API and Validation API are other features
  • 30. EFTestContext context = new EFTestContext(); var query = context.Orders .Where(c => c.PersonID == 22) .Include(c => c.State) .ToList(); List<Order> orders = context.Orders.ToList();
  • 31. • Easy way to retrieve an object via the Primary Key. EFTestContext context = new EFTestContext(); Person p = context.People.Find(1);
  • 32. EFTestContext context = new EFTestContext(); Person p = new Person { FirstName = "Testy", LastName = "User" }; context.People.Add(p); context.SaveChanges();
  • 33. EFTestContext context = new EFTestContext(); Person p = context.People.Find(1); context.People.Remove(p); context.SaveChanges();
  • 34. • Migrations is a new way to generate database changes automatically • It’s controlled through PowerShell commands • Can migrate forward or rollback DB changes. • Migrations can be handled automatically. EF will automatically apply change scripts
  • 35. • To turn Migrations on PM> Enable-Migrations • This creates a Migration folder in project • Creates Configuration.cs file • Creates __MigrationHistory system table in DB
  • 36. PM> Add-Migration "Inital" -IgnoreChanges • “Initial” is the name of the migration • The –IgnoreChanges switch tells EF to create an empty migration. Use this if this is the first migration and EF did not create the DB. • Creates a cs file with the changes since the last migration. • Does not apply changes to DB.
  • 37. PM> Update-Database • Pushes the migration changes to the DB • Use the –script switch to have EF create a SQL script of the changes. • Use –TargetMigration to determine end point for DB. (Rollback/Forward) • Be careful. I wouldn’t run against a production DB.
  • 38. Y U NO DO DATABASE RIGHT?!?!?!!!
  • 39. • Now in beta • Install using Nuget Install-Package EntityFramework –Pre • ENUMS! • Performance Improvements • Spatial Data Types • Table-Valued Functions • Most features only in .Net 4.5
  • 41. • Julie Lerman’s Blog http://thedatafarm.com/blog/ • Rowan Miller’s Blog http://romiller.com • Arthur Vicker’s Blog http://blog.oneunicorn.com • #efhelp on twitter • StackOverflow (of course) • PluralSite – Julie Lerman’s EF videos

Editor's Notes

  • #5: EDMX. Entity Data Model. A representation of your classes in XML. Three files: Conceptual (Entity Model) CDSL. Logical (Database Model) SSDL Mapping (Between Entity and Database) MSL. EDMX -&gt; In memory model and metadata. EF translates the XML into an memory model. It uses this model to persist and read data from the database.