Слайд 2Сегодня в докладе…
Поговорим… Что такое Dynamic Data?
Посмотрим... Как оно выглядит?
Подумаем... Подходит ли

нам?
Слайд 3Что такое Dynamic Data?
Оснастка для работы с данными
Гибкая кастомизация
Валидация данных
Доступно в .NET

FW 3.5 SP1 / 4.0
Слайд 4Архитектура Dynamic Data
Источник данных
Модель данных
Мета-данные

Слайд 5Три шага к Dynamic Data
Определить модель данных
Зарегистрировать модель
Кастомизировать шаблоны

Слайд 8Маршрутизация
routes.Add( new DynamicDataRoute("{table}/{action}.aspx")
{
Constraints= new RouteValueDictionary( new { action= "List|Details|Edit|Insert" }),
Model= model
});
routes.Add(new

DynamicDataRoute("{table}/ListDetails.aspx") {
Action= PageAction.List,ViewName= "ListDetails", Model= model});
routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx"){
Action= PageAction.Details, ViewName= "ListDetails",Model= model});
Слайд 9Контролы и страницы
"
VisibleDate="<%# (FieldValue!=null)? FieldValue:DateTime.Now%>"

Слайд 10Применение мета-данных
using System;
using System.ComponentModel.DataAnnotations;
[MetadataType(typeof(EmployeeMetadata))]
public partial class Employee
{
}
public class EmployeeMetadata
{
[UIHint("DateTimeCalendar")]
public objectHireDate{ get; set;
![Применение мета-данных using System; using System.ComponentModel.DataAnnotations; [MetadataType(typeof(EmployeeMetadata))] public partial class Employee {](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420602/slide-9.jpg)
}
}
Слайд 11Валидация
public class CustomerMetadata{
[Required()]
public object Title;
}
public partial class Customer {
partial void
![Валидация public class CustomerMetadata{ [Required()] public object Title; } public partial class](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/420602/slide-10.jpg)
OnTitleChanging(string value) {
if(!Char.IsUpper(value[0])) {throw new ValidationException(“!!!"); }
}
}
Слайд 12Валидация
public partial class Employee{
partial void OnValidate(System.Data.Linq.ChangeAction action){
if(action== System.Data.Linq.ChangeAction.Insert)) {

if(this._BirthDate.Value.CompateTo(DateTime.Now)>0)
throw new ValidationException(“!!!”);
}
}
}
Слайд 13Возможности
Независимость от слоя данных
LINQ2SQL, Entity Framework,ADO.NET Data Services
Правила валидации
Атрибуты полей на уровне

модели
Ограничение доступа
На уровне web.confg / на уровне страницы