entity framework: code first and magic unicorns

42
Richie Rump @Jorriss www.jorriss.net

Upload: richie-rump

Post on 04-Jul-2015

4.512 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Entity Framework: Code First and Magic Unicorns

Richie Rump

@Jorriss

www.jorriss.net

Page 2: Entity Framework: Code First and Magic Unicorns
Page 3: 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

Page 4: Entity Framework: Code First and Magic Unicorns
Page 5: Entity Framework: Code First and Magic Unicorns

• Code First Model

• DbContext

• Fluent API

Page 6: Entity Framework: Code First and Magic Unicorns

• 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

Page 7: Entity Framework: Code First and Magic Unicorns

• Code First Migrations

• Data Annotations on non-public properties

• Additional configuration file settings

• Removal of EdmMetadata table

• Bug Fixes

Page 8: Entity Framework: Code First and Magic Unicorns

• Added –IgnoreChanges to enable CodeFirstagainst existing database.

• More inevitable bug fixes.

Page 9: Entity Framework: Code First and Magic Unicorns

Entity Framework 4.0included with .Net 4.0

EF 4.1 - Code First & DbContext

EF 4.2 – Bug Fixes

EF 4.3 - Migrations

EF 4.3.1 – Bug Fixes

Page 10: Entity Framework: Code First and Magic Unicorns

Design First Code First

New Database

Existing Database

Model FirstCreate .edmx model in designerGenerate DB from .edmxClasses auto-generate from

.edmx

Database FirstReverse engineer .edmx modelClasses auto-generate from

.edmx

Code FirstDefine classes & mapping in codeDatabase auto-created at

runtime

Code FirstDefine classes & mapping in code

Adapted from Programming Entity Framework: Code First by Julie Learman and Rowan Miller page 3.

Page 11: Entity Framework: Code First and Magic Unicorns

Lovingly stolen from Programming Entity Framework: Code First by Julie Lerman and Rowan Miller page 9.

Page 12: Entity Framework: Code First and Magic Unicorns

In a word: Nuget

Page 13: Entity Framework: Code First and Magic Unicorns

• What does code look like?

• How do we use it?

• Stop! Demo time.

Page 14: Entity Framework: Code First and Magic Unicorns

• Convention over configuration

– Database naming

– Primary Key

• SQL Server Express – default database

• dbContext Class

Page 15: Entity Framework: Code First and Magic Unicorns

• 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

Page 16: Entity Framework: Code First and Magic Unicorns

• 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

Page 17: Entity Framework: Code First and Magic Unicorns

[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; }

}

Page 18: Entity Framework: Code First and Magic Unicorns

• 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

Page 19: Entity Framework: Code First and Magic Unicorns

Data Annotations

Fluent APImodelBuilder.Entity<Order>().Property(p => p.Id).HasColumnName("Order_ID");

[Column("Order_ID")]public int Id { get; set; }

Page 20: Entity Framework: Code First and Magic Unicorns

• This time it will work…I swear!

Page 21: Entity Framework: Code First and Magic Unicorns

• Expressed via the navigation properties in your classes

public class Order

{

public int Id { get; set; }

public OrderState State { get; set; }

}

Page 22: Entity Framework: Code First and Magic Unicorns
Page 23: Entity Framework: Code First and Magic Unicorns

public OrderConfiguration() {

ToTable("Order");Property(p => p.OrderStateID).HasColumnName("Order_State_ID");HasRequired(p => p.State).WithMany().HasForeignKey(f => f.OrderStateID);

}

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

Page 24: Entity Framework: Code First and Magic Unicorns
Page 25: Entity Framework: Code First and Magic Unicorns

public OrderConfiguration() {

ToTable("Order");Property(p => p.PersonID).HasColumnName("Person_ID");HasRequired(p => p.SalesPerson).WithMany(t => t.Orders).HasForeignKey(f => f.PersonID);

}

public class Person{

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

}

public class Order{

public int Id { get; set; }public int PersonID { get; set; }public virtual Person SalesPerson { get; set; }

}

Page 26: Entity Framework: Code First and Magic Unicorns
Page 27: Entity Framework: Code First and Magic Unicorns

HasMany(p => p.Items).WithMany(t => t.Orders).Map(m => {

m.ToTable("Order_Item");m.MapLeftKey("Order_ID");m.MapRightKey("Item_ID");

});

public class Item{

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

}

public class Order{

public int Id { get; set; }...public List<Item> Items { get; set; }

}

Page 28: Entity Framework: Code First and Magic Unicorns

• New way to interact with EF objects

• Makes interaction with EF MUCH simpler

• Encapsulates existing EF objects such as ObjectContext, ObjectSet and ObjectQuery

Page 29: Entity Framework: Code First and Magic Unicorns

• DbContext – Provides facilities querying and persisting object changes.

• DbSet – Represents an entity for CRUD operations

• Change Tracker API and Validation API are other features

Page 30: Entity Framework: Code First and Magic Unicorns

EFTestContext context = new EFTestContext();

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

List<Order> orders = context.Orders.ToList();

Page 31: Entity Framework: Code First and Magic Unicorns

• Easy way to retrieve an object via the Primary Key.

EFTestContext context = new EFTestContext();Person p = context.People.Find(1);

Page 32: Entity Framework: Code First and Magic Unicorns

EFTestContext context = new EFTestContext();Person p = new Person { FirstName = "Testy", LastName = "User" };context.People.Add(p);context.SaveChanges();

Page 33: Entity Framework: Code First and Magic Unicorns

EFTestContext context = new EFTestContext();Person p = context.People.Find(1);context.People.Remove(p);context.SaveChanges();

Page 34: Entity Framework: Code First and Magic Unicorns

• 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

Page 35: Entity Framework: Code First and Magic Unicorns

• To turn Migrations on

• This creates a Migration folder in project

• Creates Configuration.cs file

• Creates __MigrationHistory system table in DB

PM> Enable-Migrations

Page 36: Entity Framework: Code First and Magic Unicorns

• “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> Add-Migration "Inital" -IgnoreChanges

Page 37: Entity Framework: Code First and Magic Unicorns

• 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.

PM> Update-Database

Page 38: Entity Framework: Code First and Magic Unicorns

Y U NO DO DATABASE RIGHT?!?!?!!!

Page 39: Entity Framework: Code First and Magic Unicorns

• Now in beta

• Install using NugetInstall-Package EntityFramework –Pre

• ENUMS!

• Performance Improvements

• Spatial Data Types

• Table-Valued Functions

• Most features only in .Net 4.5

Page 40: Entity Framework: Code First and Magic Unicorns
Page 41: 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

Page 42: Entity Framework: Code First and Magic Unicorns

Richie Rump

@Jorriss

http://jorriss.net

http://dotnetmiami.com