■ Contents
xvii
■Chapter 21: Storing Data ����������������������������������������������������������������������������������� 527
Preparing for This Chapter ������������������������������������������������������������������������������������������� 528
Specifying SQL Data Types ������������������������������������������������������������������������������������������� 531
Specifying a Maximum Length ����������������������������������������������������������������������������������������������������������� 533
Updating the Database ����������������������������������������������������������������������������������������������������������������������� 534
Validating or Formatting Data Values ��������������������������������������������������������������������������� 536
Avoiding the Backing Field Selective Update Pitfall ���������������������������������������������������������������������������539
Hiding Data Values from the MVC Application �������������������������������������������������������������� 543
Accessing Shadow Property Values ���������������������������������������������������������������������������������������������������� 544
Including Shadow Properties in Queries ��������������������������������������������������������������������������������������������� 545
Setting Default Values �������������������������������������������������������������������������������������������������� 546
Displaying the Default Value ��������������������������������������������������������������������������������������������������������������� 548
Detecting Concurrent Updates ������������������������������������������������������������������������������������� 551
Using Concurrency Tokens ������������������������������������������������������������������������������������������������������������������552
Using a Row Version to Detect Concurrent Updates ��������������������������������������������������������������������������� 557
Summary ���������������������������������������������������������������������������������������������������������������������� 562
■Chapter 22: Deleting Data ���������������������������������������������������������������������������������� 563
Preparing for This Chapter ������������������������������������������������������������������������������������������� 563
Understanding Delete Constraints �������������������������������������������������������������������������������� 568
Configuring the Delete Behavior ���������������������������������������������������������������������������������������������������������570
Using the Cascade Delete Behavior ����������������������������������������������������������������������������� 571
Setting Foreign Keys to Null ����������������������������������������������������������������������������������������� 573
Relying on the Database Server to Change Foreign Keys ������������������������������������������������������������������ 574
Relying on Entity Framework Core to Update Foreign Keys ���������������������������������������������������������������576
Taking Control of the Delete Operation ������������������������������������������������������������������������� 581
Re-creating the Cascade Behavior �����������������������������������������������������������������������������������������������������581
Re-creating the Set Null Behavior ������������������������������������������������������������������������������������������������������582
Reinstating the Soft-Delete Feature ����������������������������������������������������������������������������� 583
Summary ���������������������������������������������������������������������������������������������������������������������� 587