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

Transcript of Václav Dajbych Microsoft Student Partner dajbych.net @Dajbych feed.dajbych.net events.dajbych.net.

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.