Documente Academic
Documente Profesional
Documente Cultură
Medii Hatz
Medii Hatz
Cristian Bologa
Obiective
Deprinderea principalelor concepte ale programarii in .NET
Framework 4.0
Programarea aplicatiilor Windows utilizand WPF
Programarea aplicatiilor Web utilizand ASP.NET
Programarea accesului la date
Organizare
Laborator: 418/419/420
Echipa:
Lect. Dr. Cristian Bologa, As. Dr. Alexandru Stan, Drd. Florina Covaci
Medii de dezvoltare
Cerine, evaluare
Prob teoretic: 40% - din care
Examen scris n sesiune: 75%
2 teste scrise la finalul cursurilor: fiecare 12.5%
Testele scrise: materia predata pana la momentul testului
Bibliografie
v handouts la fiecare curs din Microsoft Official Curricula
v Orice alt material la dispozitia dvs este potrivit
Cuprins
Managementul memoriei
Gestiunea tranzactiilor
Comunicarea intre procese, multithreading
Si altele
Biblioteca de clase
10
Obiectivele limbajului C#
11
Assembly
Prin compilarea codului sursa C# se genereaz fisiere executabile
care ruleaz pe CLR => assembly
Contin cod intermediar MSIL (Microsoft intermediate language)
CLR ruleaz cod MSIL indiferent de limbajul surs in care este scris
programul
Assembly:
sunt blocurile de baz a aplicaiilor .NET Framework
Reprezinta unitatea de baz pentru deployment, controlul versiunilor reutilizare si
securitate
Putem gandi un assembly ca o colecie de tipuri si resurse care conlucreaz si
formeaz o unitate logic de functionalitate
2 tipuri de assembly:
program executabil (.exe)
Librarii (.dll): pentru modularizarea dezvoltrii codului si descompunerea
aplicaiei in componente logice (reutilizabilitate)
12
Assembly (II)
Contin informaie legat de controlul versiunii
Fiecare assembly este semnat digital
Includerea informaiei legate de versiune permite realizarea
pailor necesari pentru upgrade-ul aplicaiei
Semnatura assemblyurilor asigura faptul c acestea nu vor fi
modificate sau inlocuite de o implementare alternativ
Semnatura asigura pentru fiecare assembly un strong name
Manifest-ul assembly-ului:
Contine informatia legata de versiune si semnatur
Contine metadata care descrie obiectivul (scopul) assembly-ului si referine la
alte clase si resurse
Este stocat intr-un fiier portable executable (.pe)
Semnatura assembly-ului
Protejeaza assembly-ul de modificari neautorizate
Permite includerea unui assembly semnat in Global Assembly Cache
Astfel se pot partaja assemblyuri intre mai multe aplicaii
14
Executia assemblyurilor
CLR incarc acele assemblyuri referite de ctre aplicaie
ClassLoader: pentru localizarea si incarcarea assemblyurilor
Ruleaz executabilul
CodeManager: incarca executabilul si executa metoda Main
Garbage Collector: elibereaz automat memoria obiectelor care nu mai sunt
utilizate de ctre aplicaie
Exception Manager: furnizeaz gestiunea excepiilor
15
16
Facilitati de debugging:
Furnizeaz o unealt pentru executie pas-cu-pas, breakpoints, urmarirea
executiei
Gestiunea erorilor
Error List Window -Fereastr de erori, acestea sunt produse pe msura scrierii
codului si la build
17
Template-uri de baz in VS
"
"
"
"
"
"
"
"
Console applica9on
WPF applica9on
Class Library
Windows Forms Applica9on
ASP.NET Web applica9on
ASP.NET MVC 2 Applica9on
Silverlight Applica9on
WCF Service applica9on
18
Solutia VS
19
Clase si namespace-uri
.NET Framework respect paradigma obiectual: clase
O clas defineste caracteristica i funcionalitatea unei entiti
Un namespace reprezinta o colecie logic de clase
Namespace-ul este echivalentul packageului
20
21
Comentarea aplicaiilor
Incepei procedurile prin blocuri de comentarii
Spargeti procedurile lungi in unitti de munc prin blocuri de
comentarii
La declararea variabilelor folositi comentarii pentru a descrie
utilizarea acestor variabile
La utilizarea structurilor de decizie indicai (prin comentarii)
modul de luare a deciziei si logica acesteia
22
Documentarea aplicaiilor
Se folosesc comentarii XML pentru a genera documentatie HELP
pentru aplicaii
23
24
Cristian Bologa
25
26
Aplicatiile WPF
27
Controalele WPF
3 tipuri de controale: individuale, item i layout
Controalele individuale:
28
Controale Content
Deriveaz din clasa ContentControl
Contin un singur element inglobat
Acesta poate fi setat sau citit prin proprietatea Content
Tipul proprietatii Content este Object -> poate fi setat la orice
valoare. Pentru itemurile care nu deriv din UIElement, ele se
afiseaz prin apelarea proprietii toString
Proprietatea Content se poate seta din XAML sau din cod:
29
30
Controlul Button
Permite utilizatorului s efectueze aciunea click pentru a realiza o
alegere: de ex. Sa inchid o fereastr
Utilizatorul trebuie s scrie handler pt evenimentul Click
Proprietatea isDefault: -daca este True atunci butonul este setat
Default pt GUI (se genereaz evenimentul click la apsarea Enter)
Proprietatea isCancel: -daca este True atunci butonul este considerat
Cancel pt GUI (se genereaz evenimentul click la apsarea Esc)
Setarea unui access key pt buton: prin folosirea _ in Button Content,
la fel ca si mnemonic keys
31
Controlul CheckBox
Mosteneste din clasa ButtonBase
Permite setarea unei optiuni ca fiind On sau Off
Proprietatea isChecked de tipul bool? : permite valorile
booleene si valoarea nedefinit (atunci cand fereastra este
deschis prima data)
CheckBox genereaz evenimentul click la apsarea click de
mouse
32
Controlul RadioButton
Mosteneste tot din clasa ButtonBase
Butoanele Radio sunt grupate astfel incat s se permit
utilizatorului selectarea unei singure optiuni
La apsarea de mouse se genereaz evenimentul Click
In mod uzual, toate butoanele radio dintr-un container sunt in
acelasi grup
Setarea proprietatii GroupName pentru a avea mai multe grupuri
de butoane radio intr-un singur container
Butoanele Radio se pot grupa prin asezarea lor in containere
diferite ,de exemplu in StackPanel
33
TextBlock
34
Image
Controlul Image reprezint o imagine care se afiseaz
Proprietatea Source: programatic preia un obiect de tipul
System.Windows.Media.ImageSource
In XAML se poate furniza un identificator de tip URI (Uniform
Resource Identifier)
Fisier local sau resurs web
35
TextBox
Pentru afisare si editare de text
Proprietatea Text: este cea care contine textul afisat/introdus
Proprietatea isReadOnly: permite doar afisare
Proprietatea TextWrapping: pentru afisare / editare intr-un control
pe mai multe linii
Proprietatea VerticalScrollBarVisibility: permite afisarea unui
scrollbar
36
ProgressBar
Se permite afisarea progresului unei operatii mai lungi
Proprietatea isEnabled: daca controlul ProgressBar este activ
isIndeterminate: dac controlul arat progresul real sau un progres generic. La
progres real, controlul va arta valoarea din proprietatea Value
LargeChange: mrimea de adugat/scazut din Value atunci cand se solicit o
schimbare mare
Maximum: valoarea maxim a progressBar-ului. Cand Value == Maximum,
progressbarul este la maxim
Minimum: valoarea minim a progress barului
Orientation: dac controlul este orientat orizontal sau vertical
SmallChange: mrimea de adugat/scazut din Value la o schimbare mic
Value: valoarea afiat de progres bar.
ProgressBar1.Value += 1;
Controlul Slider
38
ComboBox
39
TreeView
Gazduieste o list de controale TreeViewItem care permite
construirea unui continut de tip arbore
Un treeViewItem are un Header care permite setarea textului
care va fi afisat
Fiecare TreeViewItem gazduieste alte TreeViewItem
Putem face expande sau collapse
Proprietatea SelectedItem: returneaza itemul selectat din
TreeView
40
Menu
Menu
Poate fi pus aproape oriunde in interfata. De obicei este sus, in bara de meniu
Proprietatea IsMainMenu: cauzeaza ca meniul sa fie considerat meniu principal al
ferestrei. Primeste focus cu tasta Alt sau F10
Contine o lista de controale de tip MenuItem
41
MenuItem
ContextMenu
43
ToolBar
ToolbarTray
Este un container pentru controale de tip Toolbar
Se permite resize/move pentru controalele Toolbar plasate in ToolbarTray la
runtime
44
StatusBar
Similar cu ToolBar
Utilizat pentru a gazdui controale care afiseaz informaie
Label , ProgressBar
45
Proprieti attached
47
Panelul Grid
Controalele gazduite de un Grid sunt afisate in ordinea in care apar
in codul XAML
Se pot defini coloane si linii: ColumnDefinition si RowDefinition
Controalele child se pot asigna intr-o linie si o coloan
Proprietile attached Grid.Column si Grid.Row
UniformGrid
Plaseaz controalele intr-un grid de o mrime uniform,
Numrului de linii si coloane se autoajusteaz pe msur ce se
plaseaz controale n grid
Dac se fixeaz numrul de linii si coloane si se adaug mai multe
controale dect poate gzdui controlul de tip UniformGrid,
controalele in plus nu se vor afisa
49
StackPanel
Aseaz controalele continute unul deasupra celuilalt, in ordinea
in care sunt definite.
proprietatea Orientation: pentru a seta orientarea panelului
(StackPanel orizontal). Implicit e vertical
Proprietatea FlowDirection: pentru a seta curgerea controalelor
la afisate. Implicit e LeftToRight
50
WrapPanel
51
DockPanel
52
Canvas
<Canvas>
<Button Canvas.Top="20" Canvas.Left="30">Button</Button>
</Canvas>
53
Alinierea controalelor
" Se poate face la designTime cu u9lizarea snaplines
54
Folosirea resurselor
Resurse: obiecte sau fiiere pe care aplicaia le utilizeaz dar care nu au
fost create in aplicaie (ex: imagini, fisiere text mari)
Resurse binare: folosite atat in Windows Forms cat si in WPF
WPF defineste conceptul de resurs logic
55
Resurse binare
56
<Authority> poate fi
Aplication,,, : resursa se afla in assemblyul aplicaiei
siteOfOrigin,,, : resursa trebuie cutat in situl de origine a aplicaiei
57
Fisiere continut
58
Metoda Application.GetResourceStream
Metoda returneaza un obiect de tipul
System.Windows.Resources.StreamResourceInfo, care are 2 proprieti
ContentType tipul de continut
UnmanagedMemoryStream datele binare (raw) ale resursei
59
60
61
Resurse logice
Putem defini obiecte in XAML care nu fac parte din arborele vizual dar sunt
disponibile pentru a fi utilizate in interfata GUI
Avantajele definirii de obiecte in sectiunea de Resources fat de definirea
unor obiecte la fiecare utilizare:
Se castiga in gradul de reutilizare
Se castiga in flexibilitate prin separarea obiectelor folosite in interfata de interfata
GUI. Astfel se poate face refactoring la interfata fara a fi necesar reproiectarea
acesteia ex: colectii diferite de resurse pt aplicatii localizate
<Window.Resources>
<RadialGradientBrush x:Key="myBrush">
<GradientStop Color="CornflowerBlue" Offset="0" />
<GradientStop Color="Crimson" Offset="1" />
</RadialGradientBrush>
</Window.Resources>
62
<Application x:Class="WpfApplication2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml">
<Application.Resources>
<SolidColorBrush x:Key="appBrush" Color="PapayaWhip" />
</Application.Resources>
</Application>
Diferenta:
resursele referite static sunt regasite doar o singur data si utilizate pe toata
durata de viat a resursei
Resursele referite dinamic sunt achizitionate la fiecare referire a obiectului care
le utilizeaz
63
Dictionare de resurse
1.
2.
64
Evenimente si comenzi
Cristian Bologa
65
Sunt multicast -> pot memora referinte ctre mai multe handlere
Functioneaz ca si un dispecer intre clasa care arunc evenimentul prin
gestionarea unei liste de handlere de evenimente
66
Lucrul cu delegates
1. declararea delegate-ului
67
Handlere de evenimente
Metode legate de evenimente
La aparitia evenimentului, se execut codul din handler
Argumentele handlerului
Un obiect care a aruncat evenimentul (sender)
Un obiect care contine informatie specifica evenimentului (de tip EventArgs)
68
La runtime
69
70
Evenimente directe
Sunt similare evenimentelor din Windows Forms
Evenimentul este aruncat (si poate fi prins) doar la controlul de
origine (de la care provine)
Nu exist ansa ca evenimentul s fie prins la un control de nivel
superior
71
Evenimente bubbling
72
RoutedEventArgs
73
Codul de mai sus defineste handler pentru toate butoanele din grid
74
75
76
77
EventManager.RegisterClassHandler(typeof(Window1),
SuperClickEvent,SuperClickHandler);
78
Fiecare aplicaie WPF este incapsulat intr-un obiect de tip Application care
furnizeaz un set de evenimente pentru gestiunea ciclului de via al
aplicaie
Evenimente la nivel de aplicaie
Activated: apare cand aplicaia primeste focus de la un alt program (trecem de la
o alta aplicatie la programul nostru)
Deactivated: cand aplicatia las focusul unui alt program
DispatcherUnhandledException: apare cand o excepie nu este tratat in
aplicaie. Se poate gestiona o exceptie negestionat prin setarea
DispatcherUnhandledExceptionEventArgs.Handled la True
Exit: apare cand aplicaia este inchis
SessionEnding: cand se inchide sesiunea Windows adic la logoff sau computer
shutdown
Startup: cand aplicaia este pornit
79
80
Comenzi
Comenzi predefinite
ApplicationCommands
ComponentCommands
EditingCommands
MediaCommands
NavigationCommands
82
83
Invocarea comenzii
Prin asocierea ei cu un control folosind un input sau invocare direct din cod
84
Handlere de comenzi
Crearea CommandBinding
-asociaza o comanda cu un command handler
CommandBinding abinding = new CommandBinding();
abinding.Command = ApplicationCommands.Find;
abinding.Executed += new ExecutedRoutedEventHandler(myCommandHandler);
this.CommandBindings.Add(abinding);
85
86
Comenzi Bubbling
87
Dezactivarea comenzilor
88
Cristian Bologa
89
Cuprins
90
91
92
93
Property attributes
94
95
Create de la zero
Se mosteneste din clasa Control
Trebuie s se suprascrie metoda OnPaint
Trebuie folosit obiectul Graphics pentru a realiza desenarea
controlului in OnPaint
96
97
Template-uri pt controale
98
Interactivitatea controalelor
Controalele interactioneaz cu utilizatorul in diverse modaliti (de exemplu la
mouse rollover deasupra controlului)
ControlTemplate.Triggers: o colecie de triggere a templateului
<ControlTemplate TargetType="{x:Type Button}" x:Key="ButtonTemplate">
<Border Name="Bord1" BorderBrush="Chocolate" BorderThickness="3">
<Grid>
<Rectangle Name="Rect1" Fill="RoyalBlue" />
<Ellipse Name="Elli1" Fill="Red" />
<ContentPresenter HorizontalAlignment="Center VerticalAlignment="Center" />
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Rect1" Property="Fill" Value="AliceBlue" />
<Setter TargetName="Bord1" Property="BorderBrush" Value="Red" />
<Setter TargetName="Elli1" Property="Fill" Value="Yellow" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
99
Template binding
Freezable
...
<Setter TargetName="Elli1" Property="Fill" Value="{Binding
RelativeSource={RelativeSource TemplatedParent},
Path=Background}" />
100
101
2 mari categorii:
Controale utilizator (user control): mostenite din UserControl
Controale custom (custom control): mostenite din Control sau ContentControl
102
Dependency properties
103
104
static PieClass()
{
FrameworkPropertyMetadata md = new FrameworkPropertyMetadata(new
PropertyChangedCallback(FlavorPropertyChanged));
PieClass.FlavorProperty = DependencyProperty.Register("Flavor",
typeof(string), typeof(PieClass), md);
}
private static void FlavorPropertyChanged(DependencyObject o,
DependencyPropertyChangedEventArgs e)
{
// Implementation omitted
}
105
106
107
xmlns:cc="clr-namespace:WpfCustomControlLibrary1;
assembly=WpfCustomControlLibrary1"
<cc:CustomControl1 />
5. se face build
108
Theme
label1.Background = SystemColors.ControlBrush;
109
Cristian Bologa
ADO.NET
Ce este un DataReader?
DataSet
DataTable
DataAdapter
Modelul conceptual:
Mapat pe modelul logic
O vedere business asupra datelor astfel incat s se evite operaii join complexe
3. Code-design only
Modelul este generat doar la run-time
Entity designer
Data binding
Cristian Bologa
124
Data binding
125
Clasa Binding
Descrie relaia dintre proprietile int si surs
Proprieti ale clasei Binding:
126
sau
<Label Height="25" Width="100">
<Label.Content>
<Binding ElementName="Slider1" Path="Value" />
</Label.Content>
</Label>
sau
Binding aBinding = new Binding();
aBinding.ElementName = "Slider1";
aBinding.Path = new System.Windows.PropertyPath("Value");
Label1.SetBinding(ContentProperty, aBinding);
BindingOperations.ClearBinding(this.Label1, ContentProperty);
127
128
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<local:aClass x:Key="theObject" />
</Window.Resources>
<Grid>
<Button Content="{Binding Source={StaticResource theObject},
Path=myProperty}" />
</Grid>
</Window>
-
-
-
129
Proprietatea DataContext
Nu este absolut necesar s setm proprietatea Source pentru a crea un Data Binding.
Putem utiliza DataContext pentru pentru a lega inta de un element (obiect) sau un
container din arborele vizual
WPF verific proprietatea DataContext in cazul in care proprietile Source,
RelativeSource sau ElementName nu sunt setate
La interpretarea DataContext se incepe cu elementul specificat, iar dac acesta este
null, se continu cu inspectarea ascendent a arborelui vizual pn la identificarea
unui element nenul
Obiectul specificat de ctre DataContext va reprezenta obiectul surs pentru toate
legrile din arborele vizual care care nu au setat un Source, ElementName sau
RelativeSource
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.Resources> <local:myDataClass x:Key="aDataObject" />
</
Window.Resources>
<Grid DataContext="{StaticResource aDataObject}">
<Label Content="{Binding Path=myTitle}" />
</Grid>
</Window>
130
Utilizarea DataContext
<Grid Name="Grid1">
<Label Content="{Binding Path=myTitle}" />
</Grid>
131
Binding Mode
132
UpdateSourceTrigger
133
Conversia datelor
Implementarea IValueConverter
Metoda Convert: converteste inputul la tipul output
ConvertBack: conversia invers
[ValueConversion(typeof(int), typeof(string))]
134
Formatarea datelor
Se utilizeaz converteri
Formatarea ca si o valut:
aString = aDouble.ToString("C");
135
136
Validarea datelor
<TextBox>
<TextBox.Text>
<Binding Path="CandyBars">
<Binding.ValidationRules>
<local:CandyBarValidationRule />
<local:SweetTreatsValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
137
validare
138
139
140
Legarea la o list
2 situaii:
Legarea unui singur element la o list de obiecte i facilitarea navigrii in lista de
obiecte
Legarea unei colecii (precum elementele unui ListBox) la o list de obiecte astfel
incat toate elementele listei sunt afisate
141
System.ComponentModel.ICollectionView myView;
myView = CollectionViewSource.GetDefaultView (myCollection);
142
143
144
145
DataTemplate
146
Cristian Bologa
147
LINQ
Deffered execution
148
LINQ providers
149
Initializarea obiectelor
Object initializer:
Se execut default constructorul generat de compilator si apoi se asigneaz
proprietile cu valori
150
Proiectii
151
152
Tipuri anonime
var x = new {Make = "VW", Model = "Bug"};
txtLog.AppendText(x.Make + ", " + x.Model);
153
154
155
Metode extensii
Putem aduga metode unui tip chiar dac nu avem codul surs pentru tipul
respectiv
Problem: s adaugm o metod isNumeric clasei string
Soluie clasic: creem o clas StringHelper care s conin toate metodele
noi pe care dorim s le adugm iar aceste metode s preia o valoare de tip
string ca i prim parametru
156
Metode extensii
Extension method: putem crea o clas public static iar metoda nou s o facem
membr a acestei clase
Se foloseste cuvantul cheie this inaintea primului parametru pentru a se indica
faptul c metoda este o extensie a acestuia
157
158
LINQ keywords
159
Proiecii si let
160
where
orderby
Permite sortare cresctor / descresctor
Se poate sorta pe mai multe proprieti
var sorted = from c in cars
orderby c.Make ascending, c.Model descending
select c;
161
Paginare
162
Join
163
Inner join
164
Outer join
Produce rezultat pentru fiecare element din colectia outer chiar daca pe
colectia inner nu se identifica o potrivire de chei
Se foloseste clauza into pentru a specifica o referinta la rezultatul joinului
var cars = GetCars();
var repairs = GetRepairs();
var carsWithRepairs = from c in cars
join r in repairs
on c.VIN equals r.VIN into g
from r in g.DefaultIfEmpty()
orderby c.VIN, r==null?0:r.Cost
select new
{
c.VIN,
c.Make,
Desc = r==null?"***No Repairs***":r.Desc,
Cost = r==null?0:r.Cost
};
165
Cross join
" Produs cartezian intre 2 elemente sursa
" Se foloseste clauza from de mai multe ori
var carsWithRepairs = from car in cars
from color in colors
orderby car.VIN, color
select new
{
car.VIN,
car.Make,
car.Model,
Color=color
};
166
LINQ to SQL
Permite gestionarea BD relationale ca si obiecte
Object-relational model (ORM) tool, permite interogri, update, insert,
delete
Generarea unui model LINQ to SQL dintr-o BD existent
Add new item -> LINQ to SQL classes -> se creaz un fiier dbml
Se poate face drag & drop pt adaugarea de tabele la model
Se pot adauga proceduri stocate prin drag&drop
167
Examinarea modelului
168
Clasa DataContext
169
170
171
172
Cristian Bologa
174
Modelul conceptual:
Mapat pe modelul logic
O vedere business asupra datelor astfel incat s se evite operaii join complexe
175
3. Code-design only
Modelul este generat doar la run-time
176
177
178
Modelarea datelor
Se pot crea mai inti clasele din model si acestea s fie mapate pe o
schem de date.
Dup crearea modelului se pot defini operaii CRUD pentru model
folosind LINQ to Entity si Object Services
179
Scenarii de mapare
Single mapping: o entitate din modelul conceptual este mapat catre o singur tabel
din modelul fizic modelul implicit
Entity splitting: proprieti dintr-o singur entitate a modelului conceptual sunt
mapate n coloane din 2 sau mai multe tabele care partajeaza o cheie primara
comun
Partiionare orizontal a modelului conceptual: mai multe entiti din modelul
conceptual cu aceleasi proprieti sunt mapate pe o singur tabel
Motenire TPH (table per class hierachy): toate tipurile dintr-o ierarhie de motenire
sunt mapate pe o singur tabel
Motenire TPT (table per type): toate tipurile sunt mapate in tabele individuale
Motenire TPC (table per concrete class): tipurile ne-abstracte sunt mapate pe tabele
individuale. Fiecare tabel are coloane care mapeaz toate proprietile tipurilor
derivate, inclusiv proprietile mostenite de la clasa de baz
Mai multe seturi de entiti pe tip: o singur entitate este expus in dou sau mai
multe seturi de entiti din modelul conceptual. Fiecare set de entiti este mapat in
tabele separate in modelul fizic
Tipuri complexe: e o proprietate nescalar a unui entity type care nu are o
proprietate cheie. Se mapeaz tipuri complexe pe tabele din BD
180
Mapare function import: o procedur stocat din modelul fizic este mapat pe un
element FunctionImport din modelul conceptual
Mapare modification function: se definesc proceduri stocate in modelul fizic pentru a
reprezenta operaiile de insert, update, delete
Mapare bazat pe interogri: in modelul fizic se defineste o interogare pentru a aduce
date intr-o tabel a sursei de date. Elementul acesta de tip DefiningQuery este mapat
pe un tip entitate in modelul conceptual
Mapare bazat pe vederi: reprezint o mapare de tip read-only intre tipuri de entiti
din modelul conceptual i tabele din modelul fizic . Nu permite realizarea operaiilor
de update
Mapari de tip AssociationSet: asocieri (fie one-to-one sau one-to-many) din modelul
conceptual sunt mapate pe asocieri din modelul fizic
Asocieri Many-to-Many: fiecare capt al unei asocieri este mapat intr-o tabel
legtur in modelul fizic
Self association: asocieri intre 2 entiti de acelai tip
181
Code-first vs database-first
Code first: se creaz mai inti modelul conceptual, apoi pe baza acestuia se
genereaz modelul fizic
Database first: modelul conceptual se creaz pe baza schemei de date
Recomandare: s se porneasc de la modelul cu care programatorul se
simte cel mai confortabil
182
183
Entity set name: numele coleciei din clasa ObjectContext care va returna
obiecte de tipul entitii
Concurency Mode (la coloane):
None: coloana nu va fi implicat in verificri legate de concuren
Fixed: valoarea original a proprietii va fi trimis ca si parte a unei clauze Where la
crearea interogrilor de tip update sau delete pt a ne asigura c aceast proprietate nu
a fost modificat de la momentul cand a fost citit
184
185
ObjectContext
186
187
ASP.NET
Mediu de dezvoltare al aplicatiilor web in Visual Studio
Parte de server:
Limbaj de programare pe parte de server: C# sau VB
Utilizarea tehnologiilor de conectare la baze de date pentru realizarea site-urilor
dinamice specifice .NET
Parte de client:
HTML, CSS, Javascript
Controale web i web forms
Proiecte ASP
n funcie de tipul de acces la fiierele proiectului
File system ,FTP, HTTP
}
//Code-behind.aspx.cs
Dezavantaje:
Fisiere de configurare
Fisiere XML ce contin directive de configurare a aplicatiei
Model ierarhic al fisierelor de configurare
Caching in ASP.NET
Stocarea datelor, a elementelor de continut, a paginilor frecvent
incarcate in memorie pentru a fi incarcate mai repede
Performanta si scalabilitate
Tipuri de caching:
La nivel de aplicatie web o collectie ce poate stoca in memorie orice
tip de obiect. Obiectul va fi automat eliminat in functie de diferite
contrangeri.
La nivel de pagina stocarea unei pagini sau a unei portiuni de pagini
gata incarcata
Application Caching
DependencyCaching relatia de dependenta dintre 2 elemente din
Cache
Element independent element dependent
Cache.Insert("FileCache", File.ReadAllText("SourceFile.txt"),
new System.Web.Caching.CacheDependency(Server.MapPath("SourceFile.txt")));
Utilizarea temelor
Tema colectie de stiluri, proprietati, setari si elemente grafice
care determina design-ul paginilor asp.net
O tema poate include:
Fisiere .skin setari comune pentru propritatile controalelor ASP
Default Skin se aplica tuturor controalelor de pe pagina
Named Skin se aplica numai unui anumit tip de control de pe pagina
Ciclul de via a paginilor web: mult mai scurt decat cel al unei aplicaii
windows
La fiecare incarcare a paginii, se creaz noi obiecte
Obiectele sunt distruse cand se iese din pagina
Descrie modul in care serverul pornete si oprete aplicaia, o izoleaz fa de alte aplicaii
si execut codul acesteia
Serverul web: de obicei IIS, executat pe un Windows Server
Acesta permite acces la itemii din environment, precum folderul cu resursele aplicaiei
la acest nivel
Ciclul de
via a unei
pagini web
Se pun procesri dup initializare dar care trebuiesc facute inainte care view state-ul controalelor s
se restabileasc
De obicei se verific daca este postback i se fac procesri speciale pentru acest caz
Mai intai se lanseaz Load pentru pagin, si apoi evenimente load pentru fiecare control din pagina
respectiv
Automatic postback
View state
Campuri ascunse
Cookies
Query string
Trafic sczut:
In special cand datele care trebuie gestionate sunt multe
View state
Datele sunt salvate in view state a paginii si sunt trimise in raspunsul serverului
ctre client
La urmtoarea cerere a clientului, view state este returnat cu aceast cerere
La procesarea cererii, ASP.NET preia view state din request si il foloseste ca s
reseteze proprietile paginii si a controalelor pe care le afiseaz
Acest mecanism permite ASP.NET s aib date obiecte intre mai multe cereri fr
s le stocheze pe server
Se poate folosi view state pentru a persista date intre cererile unui client
View state este doar la nivelul aceleiasi pagini si nu intre 2 pagini diferite ale
aceleiasi aplicaii
Tipul obiectelor salvate pe View state poate fi orice tip serializabil
Campuri ascunse
Sunt campuri de tip input puse in pagina HTML care nu sunt afisate
utilizatorului
Acestea sunt returnate la comanda post a paginii
Controlul HiddenField: are proprietatea Value unde se poate salva date
HiddenField este valabil doar pentru aceasi pagina web si nu intre mai
multe pagini web
HiddenField nu are criptate/hashing: datele sunt gasite in clar in codul
HTML a paginii afisate
HiddenField nu sunt transmise la cererile Get a paginii doar la Post
Cookies
Cantitate mic de date scris la client si care este transmis cu o cerere la un website
Cookiurile persistente se scriu ca si fisiere text pe masina client
Ele rezist si dup ce browserul este inchis
Cookie temporar: care persist doar cat timp browserul este deschis
Utilizarea cea mai comun: identificarea unui utilizator intre mai multe vizite a unor
pagini web din website
Cookiurile sunt folosite pentru a se face track la sesiunea utilizatorului
Cookies
Query string
Sesiunii cookieless
Implicit se folosesc cookies pentru a se gestiona o sesiune de navigare
Se poate dezactiva folosirea cookies pentru gestiunea sesiunilor:
sessionState cookieless = true
In acest caz id-ul de sesiune va fi transmis in URL
http://www.example.com/s(lit3py55t21z5v55vlm25s55)/orderform.aspx
Controale server
Label
1.
2.
3.
4.
Controlul Literal
Controlul TextBox
Controlul CheckBox
Controlul RadioButton
Controlul DropDownList
Permite utilizatorului sa selecteze din mai multe optiuni, care toate sunt
afisate pe ecran
Optiunile sunt salvate in colectia Items a controlului
Evenimentul SelectedIndexChanged: notific schimarea selectiei
- nu este postback
Controlul Listbox
Controlul Button
Controlul Image
Controlul Calendar
Controlul FileUpload
Controlul Panel
Controlul Wizard
Server-side validation
Clasa Page are o colectie Validators care contine toti validatorii utilizati
pe pagin
Clasa Page are o metod Validate care determin executia tuturor
validatorilor si verificarea dac ceva nu se valideaz
Metoda Validate seteaz PageIsValid
ASP.NET apeleaz in mod implicit metoda Validate dup metoda Load a
paginii => se poate utiliza PageIsValid in handlerele de evenimente
Client-side validation
Grupuri de validare
Controale de validare
RangeValidator:
Dac inputul utilizatorului se afl ntr-un domeniu specificat de 2 limite
RegularExpressionValidator:
Dac inputul este conform cu expresia regulat specificat in ValidationExpression
CustomValidator:
Programatorul poate scrie propriul cod care s se execute pentru validare
Se poate scrie cod JavaScript pt validare client sau cod .NET C# pentru validare server
Navigarea in site
Client-side navigation
Cross-page
Redirectionare
Tracing si debugging
Securitatea in ASP.NET
Debugging
Activarea debugerului:
1. in solution explorer click dreapta pe website, si apoi pagina properties
2. se selecteaz start options (sau Web in VS 2013)
3. in sectiunea Debuggers se selecteaz ASP.NET
Configurarea debuggerului
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<system.web>
</configuration>
<configuration>
<system.web>
<customErrors defaultRedirect="SiteErrorPage.aspx" mode="RemoteOnly">
<error statusCode="403" redirect="RestrictedAccess.aspx" />
</customErrors>
<system.web>
</configuration>
Remote debugging
Tracing
<configuration>
<system.web>
<trace enabled="true"
requestLimit="100"
pageOutput="false"
traceMode="SortByTime"
localOnly="false"
mostRecent="true" />
<system.web>
</configuration>
Clasa Trace
In namespace-ul system.Diagnostics
Se pot afisa propriile mesaje de trace care s apar in paginile de trace
Fiecare mesaj are o categorie si un mesaj
Trace.Write("Custom Category", "Page_Load called");
User profiles
2.
3.
4.
5.
definirea user profile: se seteaz campurile care s fie salvate pentru fiecare profil
identificarea utilizatorilor: se pot identifica atat useri anonimi cat si cei autentificati
setarea si salvarea profilului
recunoasterea unui utilizator care se reintoarce
Se foloseste Aspnet_regsql.exe
Dac se execut fr parametrii: se porneste o interfa grafic un un wizzard
Dup ce baza de date este configurat, trebuie pus connection stringul in web.config
Identificarea utilizatorilor
User profiles sunt activate automat pentru utilizatorii autentificati
Dac utilizatorii nu se autentific: trebuie folosit anonymousIdentification in
web.config
<anonymousIdentification enabled="true" />
Elementele care se doresc locate se mentioneaz cu allowAnonymous
Salvarea profilelor
Impersonation
<identity impersonate="true"
userName="DOMAIN\UserName"
password="Password"/>
Form authentication
Windows authentication
<system.web>
<authentication mode="Windows"/>
</system.web>
Identitatea Windows furnizata sistemului de operare este utilizata pentru
verificarea permisiunilor precum drepturi asupra fisierelor locale sau
conectarea la baza de date utilizand integrated security
" Implicit, aceasta este identitatea procesului ASP.NET
" Impersonarea identitatii furnizate de IIS pentru toate taskurile din sistemul
de operare Windows care necesita autentificare (precum accesul la fisiere
sau la retea):
"
<system.web>
<authentication mode="Windows"/>
<identity impersonate="true"/>
</system.web>
Forms authentication
Clasa FormsAuthentication
Aplicatia se redirecteaza automat catre forma de Login atunci cand se solicita access
la o resursa protejata
Daca credentialele sunt valide, clasa FormsAuthentication permite sa se redirecteze
apelul inapoi la cererea initiala
Forms authentication se seteaza in Web.config
Credentialele pot fi setate fie in web.config fie intr-un fisier separat
<authentication mode="Forms">
<forms name="SavingsPlan" loginUrl="/Login.aspx">
<credentials passwordFormat="SHA1">
<user name="Kim
password="07B7F3EE06F278DB966BE960E7CBBD103DF30CA6"/>
<user name="John
password="BA56E5E0366D003E98EA1C7F04ABF8FCB3753889"/>
</credentials>
</forms>
</authentication>
String authUser2 = User.Identity.Name;
Cluj-Napoca - 13 Ianuarie 2016