Register your product to gain access to bonus material or receive a coupon.
Dynamic Data is a set of controls that together form a powerful, metadata-driven, run-time code generation framework.
From simple tasks, such as creating robust data entry and search screens, to complex projects, such as building entire
web applications, Dynamic Data gives developers a huge productivity boost and is an extension of ASP.NET Framework initially introduced in version 3.5 SP1. It relies on the new generation of data access frameworks, such as LINQ to SQL and Entity Framework to allow ASP.NET developers generate web pages for common data-oriented tasks, such as searching, display, creation and modification of database records instead of coding these pages manually. Out of the box, Dynamic Data gives developers a fully-functional data-driven web site they can use for the maintenance and administration in their applications, saving weeks or months of coding on a typical project. Dynamic Data can also be used in custom web pages, significantly reducing the amount of time developers have to spend on repetitive tasks.
Using Dynamic Data, ASP.NET developers can create powerful, datadriven sites with amazing speed and efficiency, eliminating massive amounts of manual coding. ASP.NET Dynamic Data Unleashed is the first complete, practical guide to Dynamic Data for every experienced ASP.NET developer.
The author thoroughly demystifies Dynamic Data, helping developers understand exactly what they can do with the framework and make it more accessible than ever before. He provides tested code to solve a wide variety of problems, explains how and why that code works, and identifies key tradeoffs and alternatives.
Packed with breakthrough techniques for improving developer productivity, this book combines a hands-on tutorial, “drill-down” explanations of advanced techniques, and real-world development scenarios.
Detailed information on how to…
ASP.NET Dynamic Data Unleashed: Field Templates
Download the sample pages (includes Chapter 3 and Index)
Preface xv
PART I Dynamic Data Fundamentals
1 Getting Started 3
Creating a New Dynamic Data Application 4
Creating a Data Model 6
Metadata in Entity Framework and Dynamic Data 12
Field Templates and Dynamic Controls 13
Data Annotations 17
Entity Templates 18
Grid Columns and Dynamic Fields 22
Filter Templates 25
Page Templates and URL Routing 29
Summary 35
2 Entity Framework 37
Understanding Entity Model 38
Creating Entity Model 38
ObjectContext and Simple Queries 43
Associations 43
Querying Across Associations 46
Modifying and Saving Entities 46
LINQ to Entities 47
Query Execution 47
Object Identity 48
Lazy and Eager Loading 49
Projections 49
Sorting 50
Grouping 51
Joins 51
Composing Queries 52
SQL Translation 53
Compiled Queries 55
Extension Methods 57
Entity Lifecycle 60
Tracking Changes 60
Optimistic Concurrency Control 61
Transactions 64
Read-Only ObjectContext 65
Entity Model in Depth 66
Mapping Entity Type to Multiple Tables 71
Entity Type Inheritance 72
Inheritance Mapping 73
Stored Procedures 74
Insert, Update, and Delete Stored Procedures 78
Summary 82
3 Field Templates 85
Read-Only Templates 86
Field Value Display Format 87
Edit and Insert Mode Templates 89
Field Value Edit Format 93
Changing Existing Field Template 93
Data Binding 96
Creating a New Field Template 99
Field Template Lookup Rules 104
Data Annotations 104
Type Names 104
Type Aliases 105
Type Fallback 105
Control Mode 106
Mode Fallback 106
Navigation Columns 107
Field Template Lookup Algorithm 108
Built-in Field Templates 111
Boolean 111
Boolean_Edit 111
Children 111
Children_Insert 111
DateTime 112
DateTime_Edit 112
Decimal_Edit 112
EmailAddress 112
Enumeration 112
Enumeration Edit 113
ForeignKey 114
ForeignKey_Edit 114
Integer_Edit 114
ManyToMany 114
ManyToMany_Edit 115
MultilineText_Edit 115
Text 115
Text_Edit 116
Url 116
Summary 116
4 Entity Templates 117
Creating an Entity Template 120
Composite Entity Templates 122
Generic Entity Templates 123
Dynamic Entity Templates 124
Edit and Insert Entity Templates 129
Entity Template Lookup Rules 131
Template Name 131
Template Mode 132
Entity Template Lookup Algorithm 133
Built-in Entity Templates 134
Summary 135
5 Filter Templates 137
Filtering with LINQ 138
Creating a Filter Template 140
GetQueryable Method 143
OnFilterChanged Method 143
DefaultValue Property 143
Dynamic LINQ Queries 143
Building Search Pages with Filter Templates 145
QueryableFilterRepeater Control 148
Filter Template Lookup Rules 150
Built-in Filter Templates 151
Boolean 151
Enumeration 151
ForeignKey 151
Summary 151
6 Page Templates 153
Built-in Page Templates 154
Details Page Template 155
Edit Page Template 159
List Page Template 163
Insert Page Template 169
Creating a New Page Template 172
Custom Page Templates 174
URL Routing 180
Action Route Parameter 180
Table Route Parameter 180
URL Parameters Versus Query Parameters 181
Dynamic Hyperlinks 182
Route Evaluation and Constraints 183
ViewName Route Parameter 185
Page Template Lookup Rules 185
Summary 186
7 Metadata API 189
Metadata Classes at a Glance 189
Metadata Explorer 191
The MetaModel Class 192
Data Model Registration 192
Accessing MetaTable Objects 193
Global Model Registration 195
Scaffolding Support 196
The MetaTable Class 196
Entity Definition 196
Data Annotations 198
Data Access Support 201
Presentation Logic Support 202
Security Support 203
The MetaColumn Class 203
Property Definition 204
Property Kind 206
Data Annotations 207
The MetaForeignKeyColumn Class 211
Presentation Logic 211
The MetaChildrenColumn Class 213
Summary 214
PART II Dynamic Data in Real-World Applications
8 Implementing Entity Validation 217
Validation Framework 217
Validation Error Messages 219
Validation in Entity Framework 221
Customizing Entity Framework Code Generation 227
Replacing Built-in Code Generator with Text Template 227
Customizing Text Template to Change Context Base Class 228
Customizing Text Template to Generate Static Constructors 229
Automated Testing 230
Creating a Unit Test 231
Test Isolation 234
Testing Validation of Different Properties 235
Integration Testing Versus Unit Testing 237
Declarative Validation 238
RequiredAttribute 238
RangeAttribute 239
StringLengthAttribute 241
RegularExpressionAttribute 242
EnumDataTypeAttribute 244
DataTypeAttribute 245
Imperative Validation 245
CustomValidationAttribute 245
Validating Multiple Rules 250
Reporting Multiple Errors 252
Validating Entity State Changes 256
Accessing Original Property Values with ObjectStateManager 256
Accessing Original Property Values in Validation Methods 257
Handling DBNull Values 259
Summary 261
9 Implementing Business Logic 263
Entity Design 264
Measure Impact of Inheritance on Query Performance 264
Keep the Conceptual and Storage Models as Close as Possible 268
Default Property Values 269
Property Interaction Rules 272
OnPropertyChanging Partial Methods 273
ISavableObject Interface 273
Entity Interaction Rules 275
Implementing Entity Interaction Rules in BeforeSave Methods 276
Implementing Entity Interaction Rules as Entity Methods 277
Implementing Entity Interaction Rules as Context Methods 278
Validation Rules 280
Validation Rule Design 281
Validation of Related Entities 287
Entity Deletion Rules 289
Reusing Entity Validation in Business Rule Methods 290
Saving Changes 292
Managing Transactions 293
Invoking Business Rules in Web Applications 294
Error Handling 296
Business Rules in the Database 298
Integrating Database Validation in Dynamic Data Applications 299
Implementing Validation Rules in Triggers 304
Implementing Business Rules in Stored Procedures 306
Summary 308
10 Building Custom Forms 309
Multimode Entity Templates 310
Custom Templates 310
Dynamic Templates 312
Creating Dynamic Label Control 315
Extending DynamicControl 319
Configuring Field Templates 321
Specifying a Field Template Explicitly 321
Configuring Field Templates Declaratively 322
Configuring Field Templates Programmatically 323
Creating Custom Field Templates 324
Implementing Interaction Between Field Templates 327
Accessing Initial Field Values of Other Columns 330
Accessing Modified Field Values of Other Columns 331
Initial Implementation of the Region_Edit Field Template 332
Improving Encapsulation of Field Templates 334
FieldValue Property 336
FieldValueChanged Event 337
AutoPostBack Property 337
Extending Existing Field Templates 337
Using Entity Templates to Control Field Templates 341
Extending DynamicControl (Again) 343
Taking Advantage of the UnleashedControl in Entity Templates 345
Summary 347
11 Building Dynamic Forms 349
Basic Form Layout 350
Configuring Appearance of Labels 352
Prompt Annotation 354
Description Annotation 356
Configuring Field Templates 357
Making Properties Read-Only 357
Overriding Default Field Templates 359
Configuring Appearance of Values 360
Enum Properties and Enumeration Templates 361
Extending the Enumeration Field Templates 362
Custom Data Types and UI Hints 368
Specifying Field Template Parameters 370
Extending Dynamic Data to Support Control Parameters 372
Field Template Interaction in Dynamic Forms 378
Fixing the FindOtherFieldTemplate Method 381
Creating Additional Dynamic Entity Templates 383
Extending Metadata to Support Entity UI Hints 384
Extending Page Templates to Support EntityUIHintAttribute 386
UnleashedEntity Control 386
Building a Dynamic Two-Column Entity Template 388
Summary 393
12 Building Custom Search Pages 395
Displaying Information from Related Entities 396
Column Sorting Across Related Entities 400
Building Custom Search Pages 401
Overcoming Limitations of Dynamic Filters 403
Using Replacement Filter Controls 405
Filtering Based on Related Entities 407
Initializing Nested Filter Control 409
Implementing Query Logic 411
Using the Parent Filter Template 419
Summary 420
13 Building Dynamic List Pages 421
Extending Filter Lookup Rules 422
Extending the FilterFactory Class 423
Extending the MetaTable Class 427
Extending the MetaModel Class 429
Building Dynamic UI with Custom Properties 432
Implementing Support for Custom Properties 433
Model Providers 434
Sorting of Custom Properties 446
Specifying Sort Expression for Custom Properties in Entity Model 446
Extending Dynamic Data to Support Sort Expression Metadata 447
Generating Metadata Attributes 450
Summary 452
14 Implementing Security 455
Table Scaffolding 456
Route Constraints 457
Web.Config Authorization Rules 458
Limitations of Configuration-Based Rules 461
Metadata Security API 462
Modifying Dynamic Templates to Support the Security API 464
Implementing Row-Level Security 472
Security Annotations 476
AuthorizationAttribute 477
CustomQueryAttribute 487
Summary 493
Index 495