václav dajbych microsoft student partner dajbych.net @dajbych feed.dajbych.net events.dajbych.net

28
Code-First Entity Framework Model-View-ViewModel Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Upload: conor-duval

Post on 28-Mar-2015

215 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Code-First Entity Framework

Model-View-ViewModelVáclav Dajbych

Microsoft Student Partner

dajbych.net

@Dajbych

feed.dajbych.net

events.dajbych.net

Page 2: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

ObsahCode-First Entity Framework

RelaceSyntaxeAnotaceDemo

Model-View-ViewModelSrovnání s MVCBindingDemo

Page 3: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Entity FrameworkORM

Automatické mapováníTříd na tabulkyVazeb tříd na relace tabulek

ProxySledování změn

Propagace změn do databáze voláním metody

Page 4: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Entity Framework 4.1

announcing

Page 5: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Entity FrameworkCode-First

Databáze

Schéma Třídy

Databáze Třídy

Page 6: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Entity Framework4.1

V současnosti EF 4.1 RCGo-live licenceZa dva týdny RTW

SQL ServerSQL Server Compact 4Oracle

Page 7: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Navigation Property

Page 8: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Navigation Property

var house = (from h in db.Houses select h).First();

var town = house ;.Town

Page 9: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Navigation Property1:1

class Town {

int Id { get; set; }

  string Name { get; set; }

House House { get; set; }

}class House {

int Id { get; set; }

  int Number { get; set; }

Town Town { get; set; }

}

Page 10: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Navigation Property1:N

class Town {

int Id { get; set; }

  string Name { get; set; }

ICollection<House> Houses { get; set; }

}class House {

int Id { get; set; }

  int Number { get; set; }

Town Town { get; set; }

}

Page 11: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Navigation PropertyM:N

class Town {

int Id { get; set; }

  string Name { get; set; }

ICollection<House> Houses { get; set; }

}class House {

int Id { get; set; }

  int Number { get; set; }

ICollection<Town> Towns { get; set; }

}

Page 12: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Datové typy

intint?stringdecimalDateTimeboolbool?bytebyte[]

int, not nullintnvarchar(128)decimal(18,2), not nulldatetimebit, not nullbittinyint, not nullvarbinary(max)

Page 13: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Syntaxe

public class Town {  public int Id { get; set; }  public string Name { get; set; }  public virtual ICollection<House> Houses { get;  set;  }     }class Entity : Town {  public Entity() {...}  public override ICollection<House> Houses {    get {...}    set {...}  }}

Page 14: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Syntaxe

public class Table { public int Id { get; set; } public int? Value1 { get; set; } public string Value2 { get; set; }

public decimal Value3 { get; set; } public decimal? Value4 { get; set; }  public bool Value5 { get; set; }  public bool? Value6 { get; set; }   public byte Value7 { get; set; }          public byte[] Value8 { get; set; }  public DateTime Value9 { get; set; }}

Page 15: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Connection String

public class DemoDb : DbContext {  public DemoDb() : base(@"connection string") {    var initializer =  new DropCreateDatabaseIfModelChanges<DemoDb>();

   Database.SetInitializer(initializer);    Database.CreateIfNotExists();          }  public DbSet<Table> Table { get; set; }}

Page 16: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

web.config

<connectionStrings> <add name="DatabaseCS" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=db.sdf" /></connectionStrings>

: base("name=DatabaseCS")

Page 17: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Inicializační strategie

DropCreateDatabaseAlwaysDropCreateDatabaseIfModelChangesCreateDatabaseIfNotExistsIgnoreDatabaseSchema

Page 18: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

DbContext

DbContextOnModelCreatingShouldValidateEntity ValidateEntity

IDatabaseInitializerSeed

Page 19: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

SqlCommand

DbContext.ExecuteSqlCommand( "UPDATE t SET c = {1} WHERE id = {0}", 7, DateTime.Now);

Page 20: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Anotace

[Key] // primary key [NotMapped][MaxLength] // nvarchar(max)[StringLength(40)] // nvarchar(40) [Required]

Page 21: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Entity Framework 4.1

demo

Page 22: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Model-View-Controller

Model

View Controller

Page 23: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Model-View-ViewModel

View

ViewModel

Model

Page 24: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

WPFBinding

Každý ovládací prvek má svůj datový kontextJak ovládací prvek tak i datový kontext vyvolávají události, pokud se hodnota změní

INotifyPropertyChangedINotifyCollectionChangedDependencyPropertyObservableCollectionICommand

Page 25: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

WPFBinding

Analogie s ASP.NET<Button Content="{Binding Text}" /><Button><%= Text %></Button>

public string Text { get; set; }code behind pro oba případy stejný

Page 26: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

Model-View-ViewModel

demo

Page 27: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

ObsahCode-First Entity Framework

RelaceSyntaxeAnotaceDemo

Model-View-ViewModelSrovnání s MVCBindingDemo

dajbych.net

@Dajbych

feed.dajbych.net

events.dajbych.net

Page 28: Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net

© 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.

The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after

the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.