100% found this document useful (4 votes)
20 views

Beginning Entity Framework Core 2.0: Database Through Domain-Specific Objects and Methods 1st Edition Derek J. Rouleau

Rouleau

Uploaded by

abildeheeney
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (4 votes)
20 views

Beginning Entity Framework Core 2.0: Database Through Domain-Specific Objects and Methods 1st Edition Derek J. Rouleau

Rouleau

Uploaded by

abildeheeney
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 62

Download the full version of the textbook now at textbookfull.

com

Beginning Entity Framework Core 2.0: Database


Access from .NET - Work directly with data
through domain-specific objects and methods
1st Edition Derek J. Rouleau
https://textbookfull.com/product/beginning-entity-
framework-core-2-0-database-access-from-net-work-
directly-with-data-through-domain-specific-
objects-and-methods-1st-edition-derek-j-rouleau/

Explore and download more textbook at https://textbookfull.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Modern Data Access with Entity Framework Core: Database


Programming Techniques for .NET, .NET Core, UWP, and
Xamarin with C# 1st Edition Holger Schwichtenberg
https://textbookfull.com/product/modern-data-access-with-entity-
framework-core-database-programming-techniques-for-net-net-core-uwp-
and-xamarin-with-c-1st-edition-holger-schwichtenberg/
textbookfull.com

Modern Data Access with Entity Framework Core: Database


Programming Techniques for . NET, . NET Core, UWP, and
Xamarin with C# 1st Edition Holger Schwichtenberg
https://textbookfull.com/product/modern-data-access-with-entity-
framework-core-database-programming-techniques-for-net-net-core-uwp-
and-xamarin-with-c-1st-edition-holger-schwichtenberg-2/
textbookfull.com

Beginning Entity Framework Core 5: From Novice to


Professional 1st Edition Eric Vogel

https://textbookfull.com/product/beginning-entity-framework-
core-5-from-novice-to-professional-1st-edition-eric-vogel/

textbookfull.com

Operative Orthopaedics 2nd Edition Timothy Wr Briggs

https://textbookfull.com/product/operative-orthopaedics-2nd-edition-
timothy-wr-briggs/

textbookfull.com
Designing Robot Behavior in Human Robot Interactions 1st
Edition Changliu Liu (Author)

https://textbookfull.com/product/designing-robot-behavior-in-human-
robot-interactions-1st-edition-changliu-liu-author/

textbookfull.com

Borderology Cross disciplinary Insights from the Border


Zone Along the Green Belt Jan Selmer Methi

https://textbookfull.com/product/borderology-cross-disciplinary-
insights-from-the-border-zone-along-the-green-belt-jan-selmer-methi/

textbookfull.com

Nutrition for Health and Health Care Linda Kelly Debruyne

https://textbookfull.com/product/nutrition-for-health-and-health-care-
linda-kelly-debruyne/

textbookfull.com

Hydrogen and Hydrogen Containing Molecules on Metal


Surfaces Towards the Realization of Sustainable Hydrogen
Economy Hideaki Kasai
https://textbookfull.com/product/hydrogen-and-hydrogen-containing-
molecules-on-metal-surfaces-towards-the-realization-of-sustainable-
hydrogen-economy-hideaki-kasai/
textbookfull.com

Pocket Rough Guide Madrid Rough Guides

https://textbookfull.com/product/pocket-rough-guide-madrid-rough-
guides/

textbookfull.com
Children and Mental Health Talk: Perspectives on Social
Competence Joyce Lamerichs

https://textbookfull.com/product/children-and-mental-health-talk-
perspectives-on-social-competence-joyce-lamerichs/

textbookfull.com
Beginning
Entity Framework
Core 2.0
Database Access from .NET

Work directly with data through
domain-specific objects and methods

Derek J. Rouleau
Beginning Entity
Framework Core 2.0
Database Access from .NET

Derek J. Rouleau
Beginning Entity Framework Core 2.0
Derek J. Rouleau
East Baldwin, Maine, USA

ISBN-13 (pbk): 978-1-4842-3374-0 ISBN-13 (electronic): 978-1-4842-3375-7


https://doi.org/10.1007/978-1-4842-3375-7
Library of Congress Control Number: 2018935922

Copyright © 2018 by Derek J. Rouleau


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Jonathan Gennick
Development Editor: Laura Berendson
Coordinating Editor: Jill Balzano
Cover designed by eStudioCalamar
Cover image designed by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street,
6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer-
sbm.com, or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member
(owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a
Delaware corporation.
For information on translations, please e-mail [email protected], or visit http://www.apress.com/
rights-permissions.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub via the book's product page, located at www.apress.com/9781484233740. For more
detailed information, please visit http://www.apress.com/source-code.
Printed on acid-free paper
To my best friend Chris and his father Paul Champagne.
If it wasn’t for you two, I may have never gotten
interested in computer science.
Table of Contents
About the Author����������������������������������������������������������������������������������������������������� ix

About the Technical Reviewer��������������������������������������������������������������������������������� xi


Acknowledgments������������������������������������������������������������������������������������������������� xiii

Introduction�������������������������������������������������������������������������������������������������������������xv

Chapter 1: Getting Started���������������������������������������������������������������������������������������� 1


What Is .NET Core������������������������������������������������������������������������������������������������������������������������� 1
Setting Up Your Application����������������������������������������������������������������������������������������������������������� 2
Creating the Database and Tables (Entities)��������������������������������������������������������������������������������� 3
Creating the Database����������������������������������������������������������������������������������������������������������� 19
Adding Data to a Table���������������������������������������������������������������������������������������������������������������� 21
Retrieving Data from a Database and Displaying It�������������������������������������������������������������������� 31
Deleting Data from a Database��������������������������������������������������������������������������������������������������� 33
Deleting a Single Record������������������������������������������������������������������������������������������������������� 33
Deleting Multiple Records����������������������������������������������������������������������������������������������������� 40
Updating Data in a Table������������������������������������������������������������������������������������������������������������� 42
Summary������������������������������������������������������������������������������������������������������������������������������������ 45

Chapter 2: Working with Multiple Tables���������������������������������������������������������������� 49


Adding Data to a Table That Has Foreign Keys��������������������������������������������������������������������������� 50
Retrieving Data from Multiple Tables������������������������������������������������������������������������������������������ 75
Updating Tables��������������������������������������������������������������������������������������������������������������������������� 81
Updating Multiple Records���������������������������������������������������������������������������������������������������� 91
Summary������������������������������������������������������������������������������������������������������������������������������������ 95

v
Table of Contents

Chapter 3: Stepping Beyond the Basics������������������������������������������������������������������ 97


Specifying Fields������������������������������������������������������������������������������������������������������������������������� 98
Joins����������������������������������������������������������������������������������������������������������������������������������������� 101
Left Outer Join��������������������������������������������������������������������������������������������������������������������� 102
Right Outer Join������������������������������������������������������������������������������������������������������������������� 104
Cross Join���������������������������������������������������������������������������������������������������������������������������� 109
Inner Join: Method Syntax��������������������������������������������������������������������������������������������������� 110
Grouping����������������������������������������������������������������������������������������������������������������������������������� 112
Query Syntax����������������������������������������������������������������������������������������������������������������������� 112
Method Syntax��������������������������������������������������������������������������������������������������������������������� 114
Logical Operators���������������������������������������������������������������������������������������������������������������������� 115
Logical OR��������������������������������������������������������������������������������������������������������������������������� 119
Paging and Filtering Results����������������������������������������������������������������������������������������������������� 121
Concurrency������������������������������������������������������������������������������������������������������������������������������ 125
Summary���������������������������������������������������������������������������������������������������������������������������������� 130

Chapter 4: Data Validation and POCOs������������������������������������������������������������������ 133


Validation Using DataAnnotations��������������������������������������������������������������������������������������������� 134
Using Recursion������������������������������������������������������������������������������������������������������������������ 143
POCOs��������������������������������������������������������������������������������������������������������������������������������������� 153
Helper Classes��������������������������������������������������������������������������������������������������������������������� 156
Validating Using a Class������������������������������������������������������������������������������������������������������ 168
Summary���������������������������������������������������������������������������������������������������������������������������������� 177

Chapter 5: Stored Procedures, Table Design, and Modifications�������������������������� 179


Stored Procedures�������������������������������������������������������������������������������������������������������������������� 179
Calling a Stored Procedure with One Parameter����������������������������������������������������������������� 185
Inserting Into Multiple Tables���������������������������������������������������������������������������������������������� 189
Table and Entity Design������������������������������������������������������������������������������������������������������������� 192
Making Changes to the Table���������������������������������������������������������������������������������������������������� 194
Summary���������������������������������������������������������������������������������������������������������������������������������� 201

vi
Table of Contents

Chapter 6: ASP.NET MVC and EF Core 2.0������������������������������������������������������������� 203


Setting Up the Application�������������������������������������������������������������������������������������������������������� 204
Database-First Development���������������������������������������������������������������������������������������������������� 207
Creating Controllers and Views������������������������������������������������������������������������������������������� 209
Page Navigation������������������������������������������������������������������������������������������������������������������� 214
The Home Page and Adding an Image�������������������������������������������������������������������������������� 216
Error Handling��������������������������������������������������������������������������������������������������������������������� 218
Displaying Events by Location��������������������������������������������������������������������������������������������� 224
Sorting Results�������������������������������������������������������������������������������������������������������������������� 228
ASP.NET MVC Basics����������������������������������������������������������������������������������������������������������������� 230
Strongly Typed Views����������������������������������������������������������������������������������������������������������� 232
Why Use MVC?��������������������������������������������������������������������������������������������������������������������� 234
Summary���������������������������������������������������������������������������������������������������������������������������������� 235

Chapter 7: Finishing Our ASP.NET MVC .NET Core 2.0 Project������������������������������ 237
Data Validation�������������������������������������������������������������������������������������������������������������������������� 237
Using a Regular Expression to Validate a Property�������������������������������������������������������������� 241
Validating the Rest of Our Models��������������������������������������������������������������������������������������� 243
Adding Column Sorting to Results�������������������������������������������������������������������������������������������� 252
Adding Search Capabilities������������������������������������������������������������������������������������������������������� 256
Adding Pagination: Version 1���������������������������������������������������������������������������������������������������� 262
Adding Paging: Version 2���������������������������������������������������������������������������������������������������������� 270
Grouping Results����������������������������������������������������������������������������������������������������������������������� 275
Summary���������������������������������������������������������������������������������������������������������������������������������� 287

Chapter 8: Wrap Up and Where to Go Next����������������������������������������������������������� 289


Not Just C# Anymore���������������������������������������������������������������������������������������������������������������� 289
Cross Platform�������������������������������������������������������������������������������������������������������������������������� 295
Unit Testing������������������������������������������������������������������������������������������������������������������������������� 297
More on LINQ���������������������������������������������������������������������������������������������������������������������������� 312
SQL Server Profiler�������������������������������������������������������������������������������������������������������������� 315

vii
Table of Contents

Change Tracking����������������������������������������������������������������������������������������������������������������������� 316


Summary���������������������������������������������������������������������������������������������������������������������������������� 321

Appendix A: Database Script for Chapter 6���������������������������������������������������������� 323


Database Diagrams������������������������������������������������������������������������������������������������������������������� 329

Index��������������������������������������������������������������������������������������������������������������������� 333

viii
About the Author
Derek J. Rouleau is a Computer and Information Systems Manager for a small company
in the greater Portland, Maine area. He has been working with computers since the mid
1990s thanks to a friend’s father, who got him interested in hardware and the workings
of the operating system. Derek started professionally programming while working for
an educational publishing and software company in the Quality Assurance department.
He has been using Visual Basic since VB 6 and C# since 2010. Although he now manages
the department where he works, Derek still makes time each week to write code and
research new and exciting technologies. When he’s not working, he is involved with Off
Track Standardbreds, and he competes in Dressage.

ix
About the Technical Reviewer
Doug Holland is a Technical Evangelist at Microsoft. Before joining Microsoft in 2010,
he was awarded the Microsoft MVP (C#) and Intel Black Belt Developer awards. He has
presented sessions at the Microsoft BUILD conference and frequently speaks at other
events about Microsoft technologies, from cloud computing to mixed reality. He holds a
Master’s Degree in Software Engineering from Oxford University, as well as certifications
from Microsoft and Unity Technologies. You can follow him on Twitter @dougholland or
connect with him on LinkedIn at https://www.linkedin.com/in/dougholland/.

xi
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Acknowledgments
I would like to thank Jonathan Gennick and Jill Balzano for having the faith in me and
for helping me bring this book to you. If it weren’t for them and all the great people at
Apress, this would not have been possible.
I also need to thank my Uncle “Doc” and Don Rahmlow of TC2 Consulting Services for
reminding me that we always need to keep trying to learn new things and for pushing me
to keep improving myself. As we get along in our careers, we tend to stick with what we
know, but in this industry you need to keep up with the ever-changing environment, which
isn’t always easy.

xiii
Introduction
We decided to try a different approach at writing a technical book, and that is to convey
the information through examples, rather than long paragraphs of text you are only
going to forget later. The hope is that this will give you a good foundation to start your
Entity Framework Core 2.0 journey and that, when you complete the book and start
working on your own projects, you’ll have a good understanding of the material.
Even though this is a book on Entity Framework Core 2.0, we are going to cover some
C# topics that you might not be familiar with, so I hope you find those parts helpful.
In the second part of this book, we cover some aspects of ASP.NET MVC Core. If you
are interested in that topic, Apress has some very good books on the subject. I highly
recommend that you look into them. Although you will have a working web application
by the end, it will behoove you to do some more reading on the subject.

Who This Book Is For


This book is for someone who has never used Entity Framework Core and is looking
for a new way to access databases. Although we focus on SQL Server in this book,
according to Microsoft, it is possible to connect to MySQL, PostgreSQL, and MyCAT as
well. (However, there is no Oracle support for EF Core yet, but hopefully there will be in
the future.) If you have not programmed in any language before, you may have a little
bit of trouble, as we don’t explain the basics of C# or ASP.NET. You may not understand
or might miss some key concepts. If you are coming over from Visual Basic, you will
probably do fine, although you need to remember to add those pesky semicolons at the
end of your code lines.
Although we do use quite a bit of LINQ in this book, it is not required that you have
any background in LINQ prior to running any of the examples. It would be wise to do
some follow-up reading on LINQ after you complete this book, but you should be able to
piece together most of what you need to do after completing these examples. If you get
stuck, an Internet search will give you a better idea of what you are looking at so you can
make a better decision as to what to use.

xv
Introduction

Requirements
When writing this book, I did everything in Visual Studio 2017 Preview and SQL Server
2014. The free version of SQL Server and Visual Studio works with all the examples in
this book. Since this is a beginner book, I thought it best to use the tools that someone
just starting might be using. You can use any version of SQL Server 2008 or newer with
Entity Framework Core 2.0; however, you will run into issues when you try to do the
paging examples if you have an older version of SQL Server, so try to use at least version
2014 if at all possible.
Although you do create a web application in the second section of this book, it is not
required that you have a web server. You need one only if you want to deploy the project
or one like it. Otherwise, you can run and test everything through Visual Studio.

Notes About NuGet Packages


At the time of the writing of this book, some of the packages that we use were still only
available in preview1-final or preview2-final. If you find that you are getting errors with
your application, it may be due to a mixture of the preview and the release versions. It’s
better to either use all preview or all release versions with your application, as that seems
to be the safest. When you use the preview packages, sometimes you will get warnings
in which it’s trying to find the best match. Normally those warnings won’t cause you any
problems when you run your code and are more of an annoyance than anything.

Before We Begin
One final note before we begin. I generally try to live my programming life by two of
my favorite quotes. The first is “never remember anything you can look up” which I’m
pretty sure is paraphrased from Albert Einstein. Now I’m not saying that you shouldn’t
remember how to use an int without having to look it up online or in a book. But for
those things that you hardly ever do, don’t take the time to commit them to memory.
The second is “frustration begins where knowledge ends”. This quote I know for sure is
from Clinton Anderson. This is by far the hardest to implement. If you are getting frustrated

xvi
Introduction

with something, take a step back and try to figure out why. If you are honest with
yourself, it’s probably because you have run out of knowledge on the subject. Try to
figure out where the problem is and which part you are missing. Then learn about it and
try again. By doing this, you will likely have more success than just plugging away and
blindly trying different things.

xvii
CHAPTER 1

Getting Started
We are going to jump right into an example, as I think that is the best way to learn
something. As we cover new topics, we explain them as we work on them. This is better
than a general overview at the start of the chapter or section, because that won’t mean
much to you while you are reading it. I personally dislike it when books show you the
wrong way of doing something and then show you how to do it “correctly” after you just
spent five minutes typing in the wrong way, so I’m not going to do that to you. However,
I do explain why we are doing something and explain what would be wrong. Since this is
a “getting started” type of book, all the examples work as written, although they may not
be the best way of getting it done. As you get more comfortable with this technology and
as your skills grow, you’ll come up with your own way of doing things. I’m just here to
help you started down the path to greatness.
For those of you who are like me and skipped the Introduction, you should be using
the latest build of Visual Studio 2017 and at least .NET Framework 4.6.1. At the time of
this writing, the latest build of Visual Studio was 15.3.3 with the .NET Framework build
4.7.02046. These build numbers can be found in the Visual Studio About window.

What Is .NET Core


Let’s take a quick moment to cover something that some of you may be wondering—
what is the difference between .NET and .NET Core? First off, .NET Core is cross
platform, so if you want to run an application on Windows, Linux, or Mac, .NET Core is
your tool. Due to its compact nature, .NET Core also gives better performance. The other
nice thing is that you can always start with .NET Core and, if you find you need more
features, you can switch to the full version of the .NET Framework. This is especially true
if you are writing a service.

1
© Derek J. Rouleau 2018
D. J. Rouleau, Beginning Entity Framework Core 2.0, https://doi.org/10.1007/978-1-4842-3375-7_1
Chapter 1 Getting Started

The application created here is used throughout the first section of this book and
each section builds off the last, so you really can’t skip around. With that being said, let’s
get started!

Setting Up Your Application


Follow these steps to set up the application:
Step 1: Create a new Visual C# Console App (.NET Core) Application in Visual studio
called ComputerInventory. Again, make sure you are using at least .NET Framework 4.6.1
for your application.
Step 2: Open the NuGet package browser by clicking on Project ➤ Manage NuGet
Packages (see Figure 1-1).

Figure 1-1. Location of NuGet package manager

2
Chapter 1 Getting Started

Step 3: Add the following packages:

• Microsoft.EntityFrameworkcore.SqlServer v2.0.0

• Microsoft.EntityFrameworkcore.Tools v2.0.0

• Microsoft.EntityFrameworkcore.SqlServer.Design v2.0.0

Note As of the writing of this book, only the preview packages were available.
If you can’t find version 2.0.0, check the preview packages.

Figure 1-2 shows what it looks like when you search for a package. Once you have
selected the package you want to install, just click on the Install button to the right and
click I Accept for any prompts that come up.

Figure 1-2. NuGet package manager

That completes the basic setup of your application. Feel free to save your work before
you continue.

Creating the Database and Tables (Entities)


If you have used Entity Framework 6.x or one of the other versions in the past, this
next part will be a little new to you (or perhaps not). We are going to start with a ­code-­
first Entity Framework type of application, as that is somewhat easier when using EF
3
Chapter 1 Getting Started

Core. Later in the book, we use an application that is database-first, so you can see the
difference. If you were to create an application based on an existing database, database-­
first is the choice you’d probably use.
We are going to follow the model that is generally used by most people who design
websites, so we need to create two folders in our application—Models and Data. If you
have never done this before, it’s simple. Just right-click on the ComputerInventory
project in the Solution Explorer and select Add and then New Folder. Then change the
name to Models. See Figure 1-3. Each of our eventual tables will have a corresponding
class file in the Models folder. I’ll take you step by step through the first one and then you
should be able to create the remaining ones on your own (you just change the name of
the class).

Figure 1-3. Adding a new folder

4
Chapter 1 Getting Started

Let’s create our first class file. Right-click on the Models folder, select Add, and
then select Class (should be at the bottom of the list). Make sure that Class is selected
and change the name to OperatingSys.cs. Figure 1-4 shows you what it should look
like when you are creating the new class file. We are using OperatingSys rather than
OperatingSystem, as OperatingSystem is a reserved type in C# and we’d have to put
Models.OperatingSystem in our code each time we wanted to use it.

Figure 1-4. Creating a new class

5
Chapter 1 Getting Started

Once you click on Add, OperatingSys.cs will be created and load for you to start
working on it. Listing 1-1 shows the code for this new class.

Listing 1-1. OperatingSys.cs After You Changed It

using System;
using System.Collections.Generic;

namespace ComputerInventory.Models {
   public partial class OperatingSys {
      public OperatingSys() {
         Machine = new HashSet<Machine>();
      }

      public int OperatingSysId { get; set; }


      public string Name { get; set; }
      public bool StillSupported { get; set; }

      public ICollection<Machine> Machine { get; set; }


   }
}

The first thing you need to remember is to make the class public so it will be
accessible throughout the application. What we have done here is created the basis
for the first table in that database, which we will call OperatingSys. In your table, it’s a
good idea to have an ID field that is normally a primary key, and we have done that with
OperatingSysID. You should have two errors, both telling you the same thing, that the
type or namespace name Machine could not be found. That is correct, as you haven’t
added them yet, so you can ignore this for now.
Two things should hopefully jump out at you. We have created a constructor for our
class and within that, we have created a new HashSet<Machine> called Machine. You
don’t need to use a HashSet<T> here, but you do need to use a collection and since that is
the default for EF Core we are going to stick with it for our examples.
If you are more familiar with EF Core and have the time, I highly recommend looking
at the other set types as there are cases in which using a HashSet isn’t needed and there is
a better fit. We then have our ICollection<Machine>, which provides an interface to the
Machine table. After all, one OS could have multiple machines, but one machine generally
only has one OS (we aren’t going to handle multi-boot systems in this simple example).

6
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Chapter 1 Getting Started

For a simple class like this, that is all there is to it. We will set up all of our tables that
don’t have any linking via foreign keys first.
Now create the next class and call it MachineType. Listing 1-2 shows all the code you
need to create the class.

Listing 1-2. MachineType.cs

using System;
using System.Collections.Generic;

namespace ComputerInventory.Models {
   public partial class MachineType {
      public MachineType() {
         Machine = new HashSet<Machine>();
      }

      public int MachineTypeId { get; set; }


      public string Description { get; set; }

      public ICollection<Machine> Machine { get; set; }


   }
}

As you can see, this is very similar to the OperatingSys class. We have one basic class
left, the WarrantyProvider class. Its code is shown in Listing 1-3.

Listing 1-3. WarrantyProvider.cs


using System;
using System.Collections.Generic;

namespace ComputerInventory.Models {
   public partial class WarrantyProvider {
      public WarrantyProvider() {
         MachineWarranty = new HashSet<MachineWarranty>();
      }

7
Chapter 1 Getting Started

      public int WarrantyProviderId { get; set; }


      public string ProviderName { get; set; }
      public int? SupportExtension { get; set; }
      public string SupportNumber { get; set; }

      public ICollection<MachineWarranty> MachineWarranty { get; set; }


   }
}

There are a couple of things with this class that you need to be aware of. First of
all, the SupportNumber property is a string. This was done so that we can limit the
number of characters to 10 (this is the number of digits that United States telephone
numbers have; if you need to add a number from another country, this may need to be
increased). We will take care of the field length in a little bit. SupportExtension is not
required, as you could have a direct number to support and thus no value here, so we
add the question mark after int to make it nullable (int?). You should have two new
errors about MachineWarranty, but they will go away soon, so you can ignore those
as well. If you were going to put this into production, you could increase the length of
the ProviderName, as you may have a support contract with a company such as “Bob’s
Computer Repair Service of Northern California,” which would not fit into a 30-character
field.
Now for the first class that has a foreign key in it. Listing 1-4 shows the code for
Machine.cs, which will be the “base class” for most of what you’ll be working on in this
project.

Listing 1-4. Machine.cs

using System;
using System.Collections.Generic;

namespace ComputerInventory.Models {
   public partial class Machine {
      public Machine() {
         SupportTicket = new HashSet<SupportTicket>();
      }

8
Chapter 1 Getting Started

      public int MachineId { get; set; }


      public string Name { get; set; }
      public string GeneralRole { get; set; }
      public string InstalledRoles { get; set; }
      public int OperatingSysId { get; set; }
      public int MachineTypeId { get; set; }

      public MachineType MachineType { get; set; }


      public OperatingSys OperatingSys { get; set; }
      public ICollection<SupportTicket> SupportTicket { get; set; }
   }
}

The first three quarters of this code contains all things that you have already seen,
except for the new error for SupportTicket. Then we get to public int OperatingSysId
{ get; set; }. In and of itself, there isn’t anything special about it, until you realize that
we created a property called OperatingSysId in the OperatingSys class. You then see
the line public OperatingSys OperatingSys { get; set; } at the bottom, and this
is what makes all the difference. Hopefully up until now, you have been wondering why
we haven’t specified which field is the primary key. That is because Entity Framework
Core is nice enough to do it if it’s obvious enough, plus we’ll be doing a bit more with
our database fields when we set up our DBContext class, but we are getting ahead of
ourselves. As you’ll see later, specifying the primary key is good practice for making your
code easier to read and for maintainability purposes. The first property we created in
each class so far has the name ID in it. Well, the great folks at Microsoft added logic that
gives EF the ability to pick the most logical choice for the key.
Now that makes sense for the first part, but what about for OperatingSysId? How
is it to know that we want that to be a foreign key? Well, that second line tells EF that we
are going to be adding a reference to the OperatingSys class/table and it assumes that
you want to link it with the OperatingSysId field to create the foreign key. I strongly
encourage you to look into this further if you aren’t going to create your tables in SQL
Server Management Studio or another DBMS, because a good table structure is like a
foundation; the stronger it is, the better it will perform/hold up.

9
Chapter 1 Getting Started

The code for the three remaining tables you need to create are shown in Listings 1-5,
1-6, and 1-7.

Listing 1-5. MachineWarranty.cs

using System;
using System.Collections.Generic;

namespace ComputerInventory.Models {
   public partial class MachineWarranty {
      public int MachineWarrantyId { get; set; }
      public string ServiceTag { get; set; }
      public DateTime WarrantyExpiration { get; set; }
      public int MachineId { get; set; }
      public int WarrantyProviderId { get; set; }

      public WarrantyProvider WarrantyProvider { get; set; }


    }
}

Listing 1-6. SupportTicket.cs

using System;
using System.Collections.Generic;

namespace ComputerInventory.Models {
   public partial class SupportTicket {
      public SupportTicket() {
         SupportLog = new HashSet<SupportLog>();
      }

      public int SupportTicketId { get; set; }


      public DateTime DateReported { get; set; }
      public DateTime? DateResolved { get; set; }
      public string IssueDescription { get; set; }
      public string IssueDetail { get; set; }
      public string TicketOpenedBy { get; set; }
      public int MachineId { get; set; }

10
Chapter 1 Getting Started

      public Machine Machine { get; set; }


      public ICollection<SupportLog> SupportLog { get; set; }
   }
}

Listing 1-7. SupportLog.cs

using System;
using System.Collections.Generic;

namespace ComputerInventory.Models {
   public partial class SupportLog {
      public int SupportLogId { get; set; }
      public DateTime SupportLogEntryDate { get; set; }
      public string SupportLogEntry { get; set; }
      public string SupportLogUpdatedBy { get; set; }
      public int SupportTicketId { get; set; }

      public SupportTicket SupportTicket { get; set; }


   }
}

Now you have what you need to start creating the seven tables used in this first section
of the book. As I mentioned, each class created in the Models folder represents a table in
the database. The next thing we need to do is set up our DBContext, which is the Grand
Poobah of Entity Framework and Entity Framework Core. It’s the connection between
your entity classes and the database. Without this primary class, we wouldn’t have Entity
Framework and we’d be back to setting up database connections using the SQL client and
creating instances of the DataSet and DataTables classes while putting things in memory
and using lots of big SQL queries. You’ll see better how great it is once you use it.
Since we are talking about DBContext, let’s create a Context class so we can get to
writing some code to interact with our database that much quicker. Remember that
folder we created called Data? That is where we are going to put our class, so create a
new class in the Data folder and call it MachineContext.cs. Listing 1-8 shows the code
we’ll use for MachineContext.cs. You could have called this class anything you wanted
and you’ll want to give it a name that makes sense to you when you create your own
projects. Okay, this is going to be a big one, so get ready.

11
Random documents with unrelated
content Scribd suggests to you:
V LUKU.

Mitä kirkossa tapahtui.

Seuraava päivä oli pyhä. Uskoin lujasti kolmannen käskyn sitovaan


voimaan ja suureen viisauteen mikäli se koski lepoa, ja siksipä
olinkin tunnontarkasti totuttautunut nukkumaan pyhä-aamuisin paria
tuntia kauvemmin kuin arkisin. Mutta koska olin perinyt paitsi
amerikkalaista omaatuntoa aito amerikkalaisen kammon ajan
tuhlaamista kohtaan, valvoin säännöllisesti lauvantai-iltaisin paria
tuntia kauvemmin kuin muina iltoina, eikä tämän pyhäpäivän
edellinen ilta ollut mikään poikkeus, kuten lukijakin edelläolevasta
voinee päättää. Mutta noin puoli kuuden ajoissa aamulla huomasin,
etteivät sisarenpoikani samalla lailla tulkinneet Siinain lakia. He eivät
olleet ainoastaan hereillä, vaan kiistelivät kiihkeästi ja kaikesta
päättäen hyvin äänekkäästi, koskapa saatoin kuulla selvästi heidän
sanansa. Uneliaalla suvaitsevaisuudella koetin olla välittämättä noista
äänekkäistä rauhanhäiritsijöistä, mutta äkkiä aloin uskoa
sijaissovitukseen, kun jokin lentävä esine suuremmalla vauhdilla kuin
voimalla lensi suoraan nenänvarrelleni ja sitten se nopeasti ja
tarpeettomalla voimalla asettui poikittain silmilleni. Hetken
jännityksen perästä ja ihmeteltyäni kuinka tuo heittoesine saattoi
tunkeutua suljettujen ovien ja ikkunoiden läpi huomasin, että syynä
kaikkeen oli nukke. Sen kauheasta likaisuudesta päättäen oli se
Toddyn omaisuutta. Sitäpaitsi huomasin, että molempien huoneiden
välinen ovi oli auki.

"Kuka heitti tämän nuken", huusin ankarasti.

Vastausta ei kuulunut.

"Kuuletteko", pauhasin.

"Mitä, Harry eno", kysyi Willy erinomaisen kohteliaasti.

"Kuka heitti nuken?"

"Mitä?"

"Kuka heitti nuken, kysyn?"

"Ei kukaan."

"Toddy, kuka heitti tämän nuken."

"Willy sen heitti", vastasi Toddy niin epäselvällä äänellä, että oli
aivan ilmeistä, että veljen käsi raskaana lepäsi pienellä huuliparilla.

"Willy, miksi sen teit?"

"Niin kun — kun — kun Toddy viskasi nukkensa minun suuhuni.


Sen hiukset menivät suuhuni, ja kun minä en tahtonut hänen
nukkeansa suuhuni, niin heitin sen takaisin hänelle. Ja sitten kun ei
vuoteen jalkapääty ollut kylliksi korkea, se lensi oven läpi sinun
vuoteeseesi."
Selitys oli ilmeisesti totuuden kanssa yhtäpitävä, vaikkakaan se ei
voinut lievittää kipua silmässäni. Mutta ponnistukseni asian selville
saamiseksi olivat saaneet minut niin täydellisesti hereille, ettei
nukkumisesta voinut olla puhettakaan. Ja avoin ovi sitten! Oliko
rosvo käynyt huoneessa? Ei, kelloni ja muistikirjani olivat paikoillaan.

"Willy, kuka aukaisi oven?"

Hetken viivyteltyään ikäänkuin hän olisi miettinyt kuka sen


todellakin oli tehnyt Willy vastasi:

"Minä."

"Kuinka sen teit?"

"Katsos eno, me tahdoimme juotavaa ja ovi oli lukossa. Ja siksi me


menimme ulos ikkunasta kuistin katolle ja tulimme sisään sinun
ikkunastasi. (Tässä hän hiukan pysähtyi.) Ja se oli niin hauskaa. Ja
sitten me avasimme oven ja tulimme takaisin."

Tulisinko pakoitetuksi sulkemaan heidän tai minun ikkunaluukut ja


vielä päälle päätteeksi näin kesäiseen aikaan! Olisipa Helena sattunut
kulkemaan ohi ja näkemään, kuinka tuo valkopukuinen kulkue vaelsi
kuistin katolla! Makasin mietiskellen sitä ääretöntä määrää
käyttämätöntä neroa, joka piili miljoonissa lapsissa tai jota käytettiin
ainoastaan viattomien aikaihmisten kiusaamiseen. Silloin kuului
keveätä astuntaa vuoteeni vierestä ja näin hennon olennon
lähestyvän vakavin kasvoin ja kuulin äänen:

"Tahdon tulla vuoteeteeti."

"Mitä varten, Toddy?"


"Telmimään, itä telmii aina pyhä-aamuitin. Tule Willy, Hajjy eno
telmii meidän kanttamme."

Willy vastasi ilohuudolla, heittäytyi alas vuoteestaan ja kiirehti sille


puolelle vuodettani, jota Toddy ei ollut anastanut. Sitten nuo
molemmat pikku ilkimykset antoivat merkin hyökkäykseen ja
syöksyivät kimppuuni. Elämäni varrella olen toisinaan nähnyt
hereilläni unta, josta en ole kenellekään kertonut. Unien joukossa oli
eräs, joka tosin ei enää ole niin selvä kuin ennen nelivuotista
sotilasaikaani. Olin olevinani ankarassa taistelussa tasankojen
maalattujen intiaanien kanssa, olin kuuntelevinani pelottomana
heidän kauheita sotahuutojaan ja itse olin olevinani loistava
esimerkki valkoisten neron etevämmyydestä. Mutta tänä pyhä-
aamuna hylkäsin tuon ajatuksen, vastoin kaikkia sääntöjä, mutta
ainaiseksi. Noiden pikku soturien käydessä hyökkäykseen tuntui
minusta niin epämiellyttävältä, että itsekin halveksin itseäni, ja
heidän sotahuutonsa kauhistuttivat minua enemmän kuin
kapinoitsijoiden kimakat huudot. Toddyn puheen mukaanhan minun
piti telmiä heidän kanssaan, mutta alusta alkaen ottivat he koko
johdon omiin pieniin, mutta toimeliaisiin käsiinsä. Toddy selitti että
molemmat polveni yhdessä muodostivat hänen "heponta" ja istuutui
niille hajareisin nauraen iloisesti ponnistuksilleni heittää hänet
"satulasta", ja pitäen itseään vakavassa asennossa kaivamalla
pikkuiset pulleat sormensa niihin kohtiin ruumistani, joihin hän
helpoimmin pääsi käsiksi. Willy huusi: "Minäkin tahdon hevosen!" ja
istuutui rinnalleni. "Näin hevoset kulkevat", selitti hän hitaasti
heilutellen itseään eteenpäin ja taaksepäin. Minulle alkoi selvetä,
miksi langollani, joka aikoinaan oli ollut mainio voimistelija, rinta oli
niin sisäänpainunut. Juuri silloin kävivät Willyn kasvot eloisemmiksi,
hänen silmänsä suurenivat ja alkoivat loistaa ja hän huudahti: "Näin
hevoset laukkaavat!" Hän nousi seisomaan, valmistautui
hyppäykseen ja syöksähti koko 23 kilon painollaan suoraan
keuhkoilleni. Tämän tempun hän ehti uudistaa useampaan kertaan,
ennenkuin täydellisesti toinnuin hänen röyhkeytensä ja painonsa
aiheuttamasta hämmennyksestä. Mutta kivun tunne sai minut
lopullisesti täyteen tajuuni ja hurjalla ponnistuksella heitin nuo
pahuuksen ratsastajat "satulasta" ja pelastauduin keskilattialle.

"Ah-h-h-h", huusi Toddy. "Tahdon jattattaa."

"Voi, vooii-i", ulvoi Willy. "Sinä olet paha. En ollenkaan pidä


sinusta."

Huolimatta Toddyn toivomuksesta, Willyn arvostelusta sekä hänen


arvonantonsa alenemisesta, pukeuduin nopeasti. Vaikka leponi olikin
tullut häirityksi, tunsin suurta kiitollisuutta siitä, että oli pyhä;
kirkossa ainakin saatoin olla rauhassa kiusanhengiltäni.
Aamiaispöydässä molemmat pojat tarjoutuivat seuraamaan minua
jumalanpalvelukseen, mutta hylkäsin tarjouksen siitä edes
kiittämättä. Ottamalla heidät mukaan olisin voinut olla avuliaana
opettamaan heille yhden kauneimmista tavoista, mutta epäilin
suuresti, tokkopa todellakin saattoi olla velvollisuuteni panna itseni
alttiiksi tuollaisen teon mahdollisille seurauksille. Ja sitäpaitsi,
saatoinhan siellä tavata neiti Maytonin. Samalla sekä toivoin että
pelkäsin tapaavani hänet, enkä voinut sietää ajatusta, että
näyttäytyisin hänelle noiden molempien seurassa, jotka olivat
syypäät naurettavaisuuteeni hänen silmissään. Willy nurisi ja Toddy
itki, mutta minä pysyin vahvana, vaikka olinkin niin myöntyväinen
heidän oikeutetuille pyynnöilleen, että otin heidät pitkälle kävelylle
ennen jumalanpalvelusta. Huvitin lapsia tappamalla käärmeen ja
samalla lyömällä säpäleiksi hienon kävelykeppini; ainoa lohdutukseni
oli, että kepin jäännöksistä saatoin valmistaa kepin Willylle. Kun
saavuimme kotiin, tein, ruvetessani valmistamaan lähtöä kirkkoon,
juhlallisen sopimuksen Willyn kanssa, jota yleensä pidettiin
veljesparin päänä. Willy lupasi itsensä ja veljensä puolesta, etteivät
he yrittäisi huoneeseeni, eivät riitelisi, eivät kaivaisi maata muutoin
kuin lapiolla, ja kuljettaisivat multaa määräpaikkaansa jotenkin
muutoin kuin omissa lakeissaan tai esiliinoissaan, eivät poimisi
kukkia puutarhasta, eivät aukaisisi vesihanoja ja kääntyisivät kaikissa
erimielisyyksissä keittäjän puoleen, jonka tuli olla riidanratkaisijana,
eivätkä rakentaisi taloja uusista kirjoista, jotka olin asettanut
kirjaston pöydälle. Toivoen, että luvatut ehdot tarkkaan täytettäisiin,
minä suostuin siihen, että Willy pääsisi yksin pyhäkouluun, joka alkoi
aamujumalanpalveluksen jälkeen, mutta vasta sitten, kun Maggie
julistaisi hänen olevan kaikin puolin kunnossa. Kun Toddya pidettiin
vuoteessa päivittäin yhdestätoista yhteen, arvelin voivani mennä
kirkkoon ilman häiritsevää pelkoa, sillä yksinään ei Willy voinut
yhden ainoan tunnin kuluessa tehdä itsensä syypääksi mihinkään
erikoiseen syntiin. Hillcrestin kirkossa oli tilaa paljon useammalle,
kuin mitä siellä oli ihmisiä, sillä ani harvoja kesävieraita oli vasta
saapunut ja huomasin, että seurakuntalaiset tähystelivät minua
tarkasti. Tässä tuntui jo olevan minulle tarpeeksi, mutta siinä ei
sentään ollut kaikkea, mikä osakseni oli tuleva, sillä kirkonpalvelija
ohjasi minut alttarin lähettyville ja osoitti minulle paikan penkissä,
jossa istui yksi ainoa henkilö — neiti Mayton. Tietystikään neitonen ei
ollut huomaavinaan minua, hän oli liian hyvin kasvatettu tehdäkseen
mitään sellaista kirkossa, ja lohduttomana minä vietin kymmenen
minuuttia sadatellen mielessäni kaikkia hyviä tapoja.
Jumalanpalveluksen alkaminen lopetti osaksi rauhattomuuteni, sillä
minulla ei ollut virsikirjaa — penkissäkään ei sellaista ollut —
jonkavuoksi neiti Mayton ystävällisesti salli minun seurata omastaan.
Ja hänen käytöksensä oli niin moitteetonta ja hän esiintyi niin
vieraana, että minä ajattelin hänen kohteliaisuutensa varmaankin
johtuvan etupäässä kristillisestä velvollisuudentunnosta; hän ei olisi
voinut olla kohteliaampi ja kylmempi, vaikka minä olisin ollut tatarien
khani. Ensimäisen virren sävel oli minulle aivan outo, niin että minä
surkeasti kompastelin yrittäessäni laulaa tenoria, vaikka neiti Mayton
lauloi sopraanoansa kertaakaan erehtymättä. Saarna oli pitempi kuin
mihin olin tottunut ja usein huomasin, etten ensinkään seurannut.
Asemani ja ulkomuotoni eivät koskaan olleet tuntuneet niin
mitättömiltä kuin tämän loppumattoman saarnan aikana.

Papin päästyä sanoihin: "Ja lopuksi rakkaat veljet", rukoilin


osaltani saarnalle hyvää ja nopeaa loppua. Seurakuntakin tuntui
olevan kanssani samaa mieltä, sillä ympäriltäni kuului yleistä kohinaa
näitä sanoja lausuttaessa. Pian kuitenkin selvisi, että sanankuulijain
liikehtiminen aiheutui jostakin muusta syystä, sillä kuulin takaani pari
pidätettyä nauruntyrskähdystä. Neiti Maytonkin käänsi päätään
nopeammin, kuin mikä oli ominaista hänen liikkeidensä tavalliselle
sulolle ja pappikin pysähtyi arveluttavan pitkäksi aikaa. Käännyin
paikallani ja näin sisarenpoikani Willyn, puettuna parhaaseen
pukuunsa, lakki ylimielisesti päässä, heilutellen uutta keppiänsä
mahdollisimman komeasti. Hän pysähtyi jokaisen penkin päähän
tarkastellen perinpohjin siellä istujia, ei näyttänyt löytävän ketä etsi,
mutta jatkoi ponnistuksiaan huolimatta minun yrityksistäni vangita
hänen katsettaan. Lopuksi hän keksi erään perhetuttavan, jolle hän
purki sydämensä sanoen yli kirkon kuuluvalla äänellä:

"Tulin etsimään enoani."

Juuri silloin hänen katseensa osui minuun, hymy kirkasti äkkiä


hänen kasvonsa, hän kiirehti luokseni ja tuo veijari painoi pehmeän
poskensa luottavasti poskeani vastaan. Kirkossa kuului hiljaista
sorinaa. En tiennyt mitä hänelle sanoa tai tehdä. Mutta
neuvottomuuteni muuttui ihmettelyksi, kun neiti Mayton, kasvot
loistaen huonosti peitettyä iloisuutta, mutta silmät täynnä hellyyttä,
veti tuon pienen veitikan syliinsä ja suuteli häntä kuuluvasti. Samalla
hetkellä pappi hiukan vitkastellen sanoi: "Rukoilkaamme." Nopeasti
painoin pääni penkkiin iloisena siitä, että voin kätkeä kasvoni. Mutta
kun salaa katsahdin tämän jumalattoman häiriön syytä, kohtasin
neiti Maytonin katseen. Hän nauroi niin hillittömästi, että minunkin
oli mahdoton vastustaa ja minä nauroin sitäkin enemmän
ymmärtäessäni, että toinen vallaton poika oli sovittanut sen minkä
toinen oli rikkonut.

Loppusiunauksen jälkeen Willy oli yleisen huomion esineenä. Tätä


onnellista tilaisuutta hyväkseni käyttäen minä ehätin sanomaan neiti
Maytonille:

"Oletteko vieläkin samaa mieltä sisareni kanssa hänen poikiensa


suhteen, neiti Mayton?"

"Mielestäni he ovat äärettömän hauskat", vastasi neiti suurella


innolla. "Toivon niin hartaasti, että tulette heidän kanssaan käymään
luonani. Haluaisin kerrankin nähdä nuoren gentlemannin kaikessa
alkuperäisyydessään."

"Kiitos", sanoin minä. "Ja Toddyn vaadin silloin tuomaan


kukkakimpun katumuksen merkiksi."

"Tehkää se", vastasi hän päästäessäni hänet ohitseni penkistä. Se


oli mitätön lause, mutta se teki minut onnelliseksi vielä kerran.

"Katsoppas, Harry eno", huudahti Willy, kun lähdimme yhdessä


kirkosta, "pyhäkoulu ei vielä alkanut, ja tahdoin kuulla laulettaisiinko
taasen kirkossa; ja minä tulin sisään ja sinä et ollut isän paikalla ja
minä tiesin, että sinä olit jossakin ja siksi minä etsin sinua."

"Jumala sinua siunatkoon", ajattelin siepaten hänet syliini


ikäänkuin olisin tahtonut kiirehtiä hänen menoaan pyhäkouluun,
mutta itse asiassa antaakseni hänelle suudelman kiitollisuuden
osoitukseksi. "Sinä teit oikein, aivan oikein!"
VI LUKU.

Sunnuntai-iltapäivä.

Sunnuntaipäivälliseni oli erinomainen sekä laadultaan että


runsaudeltaan, ja lankoni punaviini oli mainiota, mutta joku erikoinen
levottomuus esti minua nauttimasta ateriasta siinä määrin kuin olisin
nauttinut toisissa olosuhteissa. Rauhattomuuteni johtui
jonkunlaisesta vastuunalaisuuden ja neuvottomuuden tunteesta.
Ymmärsin, että minun oli pidettävä huolta siitä, että sisarenpoikani
viettäisivät tämän päivän tietoisina pyhäpäivän vaatimuksista ja
velvoituksista, mutta en ymmärtänyt, miten oli meneteltävä. Pojat
olivat liian pienet, jotta heille voisi pitää raamattutuntia ja he olivat
liian vilkkaita pysyäkseen rauhallisina millään tavallisilla keinoilla.
Pitkän miettimisen jälkeen päätin neuvotella lasten itsensä kanssa
saadakseni heiltä selville, miten heidän vanhempansa olivat
menetelleet.

"Willy", sanoin minä, "mitä teette sunnuntaisin, kun isä ja äiti ovat
kotona? Mitä he lukevat ja mistä he puhuvat teille?"

"Oi, he kiikuttavat meitä paljon!" sanoi Willy loistavin silmin.


"Ja he lähtevät kanttamme ettimään tuo-villaa", huomautti Toddy.

"Niin, niin", huudahti Willy, "suo-villaa karitsoiksi, etkö tiedä?"

"Hm, kyllä. Muistan kyllä jotakin sellaista nuoruudenpäiviltäni!


Nehän kasvavat hyvin mutaisilla paikoilla."

"Niin, ja siellä on puro ja sananjalkoja ja tuohta ja jos et ole


varuillasi, putoat puroon, kun etsit tuohta."

"Ja me menemme Haukanpetän kallioille", huusi Toddy kimakalla


äänellä.
"Ja itä kantaa meitä telatta, kun me vätymme."

"Ja hän valmistaa meille pillejä", sanoi Willy.

"Willy", sanoin kiirehtien, "riittää jo!" Runoilija sanoo:

"'Huveista maailman mä luovun',

"ja ihmettelenpä suuresti, ettei isänne olo opettanut teitä


tekemään samoin. Eikö hän koskaan lue teille?"

"Kyllä, kyllä", huusi Willy taputtaen käsiään ikäänkuin onnellinen


ajatus olisi juolahtanut hänen mieleensä. "Hän ottaa esille raamatun
— suuren, paksun raamatun, tiedäthän — ja me kaikki paneudumme
laattialle pitkäksemme, ja hän lukee siitä meille kertomuksia
Davidista ja Noakista ja Vapahtajasta, kun hän oli pikku poika ja
Joosefista ja Faraon joukko kääntyi takaisin halleluijaa."

"Ja mitä?"

"Faraon joukko kääntyi takaisin halleluijaa", toisti Willy.


"Etkö sinä tiedä siitä, kuinka Mooses piti keppiänsä Punaisen
meren yläpuolella ja kuinka vesi nousi kumpaistakin rantaa ylös ja
Israelin lapset menivät ylitse? Sehän juuri tarkoittaa samaa kuin
hukkui muinoin Faraon joukko halleluijaa! Etkö sitä tiedä?"

"Willy", sanoin. "Epäilen, että olet kuullut kuljeksivien laulajien


laulavan."

"Isä ja äiti laulavat meille kaikenlaisia lauluja. Sinähän voit laulaa


niitä meille."

"Ja itä ottaa meidät kanttanta mettään ja tekee meille keppejä",


sanoi
Toddy.

"Ja siellä missä rakennetaan uusia taloja, vie hän meidät


mukanansa rakennustelineille."

"Onko hänellä mitään keinoa pidentää iltapäivää", kysyin minä.

"En tiedä mitä se merkitsee, mutta hän asettaa kummimaton


ruohikolle ja sitten me kaikki käymme siihen pitkäksemme ja
kuvittelemme, että olemme nukkuvia sotamiehiä. Väliin vain kun me
heräämme, isä jää nukkumaan ja äiti ei anna meidän herättää häntä.
Se ei ole mielestäni mikään hauska leikki."

"Minun mielestäni raamatun kertomukset ovat kaikkein


hauskimmat, eikö teistäkin?"

Willy näytti hieman epäilevän. "Minun mielestäni on keinuminen


hauskempaa", sanoi hän, "tai ei, mennäänpäs etsimään karitsoja.
Nytpä tiedänkin, tee meille pillit, ja sitten voimme puhaltaa niitä, kun
menemme karitsoja hakemaan. Toddy kulta, etkö sinäkin pidä
karitsoista ja pilleistä?"

"Kyllä — ja keinumitetta ja tuohetta ja tahdon mennä


Haukanpetän kalliolle", vastasi Toddy.

"Lukekaamme ensin raamattua", sanoin minä. "Jumala ei pidä


siitä, ettette opi mitään hyvää tänäpäivänä."

"Hyvä", sanoi Willy ottaen hurskaasti tekopyhän ilmeen. "Luetaan


vain.
Mielestäni on hauskin lukea Joosefista."

"Kejjo meille Goljatitta", ehdotti Toddy.

"Ei Toddy", väitteli Willy vastaan. "Joosefin viitta oli aivan yhtä
verinen kuin Goljatin pää." Sitten Willy kääntyi minuun ja selitti, että
"siksi Toddy pitää Goljatista, kun hänen päänsä oli yltäyleensä
verinen, kun se katkaistiin." Ja Toddy — tuo henkiolento, jota äidin
sanojen mukaan kaikki kaunis vastustamattomasti veti puoleensa —
Toddy katsoa tuijotti minuun kuten teurastajapoika katsoo
kuolemaantuomittua lammasta ja huomautti:

"Goljatin pää oli aivan vejinen ja Davidin miekka oli aivan vejinen,
aivan vejinen, niin vejinen kuin, kuin kaikki."

Lähetin nopeasti pienen huokauksen korkeuteen, avasin raamatun,


etsin kertomuksen Joosefista ja luin huomattavasti lyhennellen.

"Joosef oli hyvä, pieni poika, jota hänen isänsä hellästi rakasti.
Mutta veljet eivät pitäneet hänestä. Ja he myivät hänet Egyptiin. Ja
hän oli hyvin viisas ja selitti ihmisille, mitä heidän unensa merkitsivät
ja niin tuli hänestä kuuluisa mies. Ja hänen veljensä tulivat Egyptiin
ostamaan viljaa ja Joosef möi heille, ja sitten hän ilmaisi heille
itsensä. Ja hän lähetti heidät kotiin hakemaan isää Egyptiin ja sitten
he elivät siellä kaikki yhdessä."

"Ei te ole niin", sanoi Toddy, kasvoillaan ilme kuten vääryyttä


kärsineellä ihmisellä. "Onko vaan niin, Willy?"

"Ehei", sanoi Willy. "Sinä et ole lukenut ollenkaan hyvin. Minäpä


kerron teille kuinka se oli. Oli kerran pieni poika, jonka nimi oli
Joosef ja hänellä oli yksitoista veljeä — yksitoista kauheata veljeä. Ja
hänen isänsä antoi hänelle uuden viitan ja hänen veljillään ei ollut
yllään muuta kuin vanhat nuttunsa. Ja eräänä päivänä hän vei heille
heidän päivällisruokansa ja he pistivät hänet syvään, pimeään
kuoppaan, mutta he eivät panneet hänen uutta kaunista viittaansa
sinne — he tappoivat kauriin ja kastoivat viitan — ajatelkaa, että se
tehtiin uudelle kauniille viitalle — ja kastoivat sen kauriin vereen, ja
se tuli aivan veriseksi."

"Aivan vejitekti", ehätti Toddy väliin julmalla innolla. Willy jatkoi:

"Mutta samaa tietä tuli muutamia ismaelilaisia ja nuo yksitoista


kauheaa veljeä ottivat hänet pois syvästä, pimeästä kuopasta ja
möivät hänet ismaelilaisille ja he veivät hänet kauvas Egyptiin. Ja
hänen vanha isärukkansa itki ja itki ja itki, kun hän ajatteli, että suuri
leijona söi Joosefin suuhunsa: mutta häntä ei ollenkaan syöty; mutta
siellä ei ollut postikonttoria eikä rautatievaunuja eikä postivaunuja,
siellä Egyptissä, ja siellä ei ollut sähkösanomia, niin että Joosef ei
voinut antaa isällensä tietoja missä oli, ja hänestä tuli niin hyvä ja
viisas, että Egyptin kuningas antoi hänen myydä kaiken viljan ja
ottaa rahat hoitoonsa, ja eräänä päivänä tuli muutamia miehiä
ostamaan viljaa, ja Joosef katseli heitä ja siinähän olikin hänen omat
veljensä. Ja hän säikytti heitä — minä olisin antanut heille kaikille
selkään, jos minä olisin ollut Joosef, mutta hän vain säikytti heitä, ja
sitten hän ilmaisi heille kuka hän oli, ja hän suuteli ja hän ei lyönyt
heitä, eikä jättänyt ilman aamiaista, eikä pannut heitä nurkkaan eikä
mitään sellaista, ja sitten hän lähetti heidät isää noutamaan, ja kun
hän näki isänsä tulevan, hän juoksi kovaa kyytiä ja halasi ja suuteli
häntä. Joosef oli liian iso kysyäkseen isältänsä, oliko hänellä
rintasokeria, mutta hän oli hyvin iloinen nähdessään hänet. Ja
kuningas antoi Joosefin isälle kauniin maatalon, ja he elivät
senjälkeen kaikki iloisina."

"Ja he kattoivat viitan vejeen", toisteli Toddy.

"Harry eno", sanoi Willy, "mitä luulet että minun isäni tekisi, jos
hän luulisi, että leijona söisi minut suuhunsa? Minä luulen, että hän
itkisi kauheasti, etkö sinäkin? Kerro nyt meille toinen kertomus — tai
minäpäs tiedän — lue meille —."

"Goljatitta", keskeytti Toddy.

"Kerroppas sinä minulle hänestä, Toddy", sanoin.

"No", sanoi Toddy. "Goljat oli pitkä, tuuji miet, ja David oli hyvin
pieni miet, ja Goljat tanoi 'Tule tänne niin minä työn tinut' ja David
tanoi 'En minä tinua pelkää.' Titte David pitti viiti pientä kiveä linkoon
ja pyyti Jumalalta apua, ja antoi lingon paitkata kivet Goljatin tiimiin
ja tappaa hänet aivan kokonaan, ja David otti Goljatin miekan ja löi
Goljatin pään poikki ja te tuli aivan vejitekti, ja Goljat juokti
tiehentä." Tätä lyhyttä kertomusta säesti suurempi määrä vilkkaita ja
yllättäviä eleitä, kuin mitä hillitty kaunopuhuja Gough milloinkaan
tuhlaa pitkään puheeseen.
"Minusta ei ole ollenkaan hauskaa kuulla Goljatista", sanoi Willy.
"Minä tahtoisin kuulla Feruksesta."

"Kenestä?"

"Feruksesta, etkö tiedä kuka hän on?"

"En ole milloinkaan kuullut hänestä, Willy."

"Ohhoh", ihmetteli Willy, "eikö sinulla ollut isää, kun olit pieni?"

"Kyllä, mutta hän ei koskaan kertonut kenestäkään Ferus-


nimisestä, eikä sen nimistä ole Tietosanakirjassakaan. Mikä mies hän
oli?"

"Oli kerran mies, jonka nimi oli Ferus-Offerus ja hän taisteli


kuninkaiden puolesta, mutta kun joku kuningas rupesi jotakin toista
pelkäämään, hän ei enää tahtonut taistella hänen puolestaan. Ja
eräänä päivänä ei hän löytänyt yhtään ainoata kuningasta, joka ei
olisi ketään peljännyt. Ja ihmiset sanoivat hänelle, että Jumala on
maailman mahtavin kuningas ja hän ei peljännyt mitään eikä ketään.
Ja hän kysyi heiltä, missä hän voisi löytää Jumalan, ja he sanoivat,
että hän on ylhäällä taivaassa, niin etteivät muut kuin enkelit voineet
häntä nähdä, mutta hän tahtoi, etteivät ihmiset taistelisi hänen
puolestaan, vaan tekisivät työtä hänen hyväkseen. Niin Ferus tahtoi
tietää, minkälaista työtä hänen pitäisi tehdä, ja ihmiset sanoivat, että
siellä lähellä oli joki, jossa ei ollut lauttaa, siksi, että siinä oli niin
kova virta, ja he luulivat, että Jumala pitäisi siitä, että hän kantaisi
ihmisiä joen ylitse. Niin Ferus meni sinne, ja hän valmisti itselleen
hyvän, vahvan kepin, ja kun joku tahtoi päästä joen yli, kantoi hän
hänet selässään.
"Eräänä iltana hän istui pikku tuvassaan tulen ääressä piippua
polttaen ja lukien sanomalehteä, ja ulkona satoi vettä ja rakeita ja
tuuli ja myrskysi, ja hän oli iloinen siitä, ettei kukaan tahtonut joen
yli. Silloin hän kuuli jonkun huutavan: 'Ferus!' Ja hän katsoi ulos
ikkunasta, mutta kun hän ei voinut nähdä ketään, istuutui hän
jälleen. Sitten taas joku huusi: 'Ferus!' ja hän avasi oven ja siellä oli
pikku poikapahanen, suunnilleen Toddyn kokoinen. Ja Ferus sanoi:
'Hei poika, tietääkö äitisi, että olet ulkona?' Ja pikku poika sanoi:
'Tahdon mennä joen yli.' 'Hyvä', sanoi Ferus, 'sinä olet kokolailla
pieni poika kulkeaksesi yksin, mutta hyppää selkääni!' Niin pikku
poika hyppäsi Feruksen selkään, ja Ferus meni veteen. Kyllä se
mahtoi olla kylmää! Ja joka askeleelta pikku poika tuli
raskaammaksi, niin että Ferus oli kaatumaisillaan, ja jos hän sen olisi
tehnyt, molemmat olisivat hukkuneet. Ja kun he tulivat toiselle
rannalle, Ferus sanoi: 'Sinä olet painavin pikku olento, mitä
milloinkaan olen kantanut', ja hän kääntyi ympäri katsoakseen
häneen, ja siinä ei ollutkaan mitään pientä poikaa, vaan suuri mies
— Vapahtaja. Ja Vapahtaja sanoi: 'Ferus, kuulin, että koetit tehdä
työtä minun hyväkseni, ja minä ajattelin, että tulisin katsomaan
sinua, ilman että sinä tietäisit kuka olen. Ja nyt sinä saat uuden
nimen; sinua kutsuttakoon Christ-offerus, sillä se merkitsee
Vapahtajan kantaja.' Ja kaikki kutsuivat häntä täst'edes Christ-
offerukseksi, ja kun hän kuoli, kutsuivat he häntä Pyhäksi
Christopheriksi, sillä Pyhäksi kutsutaan hyviä ihmisiä, kun he ovat
kuolleet."

Willyllä itsellään oli kasvoillaan ilme kuin pyhimyksellä, kun hän


esitti tämän kertomuksen, mutta nämä hänen ulkonäköään koskevat
mietteeni keskeytti Toddy, joka, pitäen veljensä kertomusta liian
vähän jännittävänä, oli karannut puutarhaan, tutkinut siellä
ampiaispesää, saanut piston ja kirkui nyt täyttä kurkkua. Hän juoksi
luokseni, minä nostin hänet syliini. Hän nyyhkytti:

"Tuudi minua. Tahdon Kalle mihin joutunut."

Heilutin häntä edestakaisin, hyväilin hellästi, mutta yhä hän vain


nyyhkytti:

"Tahdon Kalle mihin joutunut."

"Mitähän tuo lapsi tarkoittanee?" kysyin ihmeissäni.

"Hän tahtoo, että laulaisit laulun Kalle pojasta" sanoi Willy. "Hän
tahtoo, että äiti laulaa sen hänelle aina, kun hän on satuttanut
itsensä ja sitten hän lakkaa itkemästä."

"Sitä en osaa", sanoin. "Eiköhän 'Virtaa, Jordan' kelpaisi, Toddy?"

"Minä sanon, kuinka se on", sanoi Willy, ja tuo nuori mies lauloi
seuraavan laulun, säkeen kerrallaan, minä kerraten sanat ja
säveleen:

"Ken tietää, mihin joutunut


korini pieni ois",
näin Kalle kysyy, "joku lie
sen vienyt multa pois.

Ja entäs pikku kissasein?


Se myöskin poissa on.
No ihmettä, yht'aikaa ne
on päässeet piilohon!
Käyn äidin luo, ma aavistan
sen sinne mennehen
se sohvalla lie ottanut
taas pikku unosen.

Käy äiti, äiti, katsohan


näkyä hupaisaa:
kas, kissa unta ottelee
korissa makeaa!"

En voinut käsittää, missä tämän laulun vaikutus sisarenpoikani


vaivoihin piili, mutta lopetettuani sen muuttuivat nyyhkytykset
tyytyväisyyden huokaukseksi.

"Toddy", sanoin, "pidätkö enosta?"

"Pidän."

"Sanoppas sitten, kuinka tuo lystikäs laulu voi sinua lohduttaa?"

"Tuntuu vain niin hyvältä, eikä tee kipeätä", vastasi Toddy.

"Eikö tuntuisi yhtä hyvältä, jos laulaisin 'Syöstynä kuiluun synkän


epätoivon?'"

"Ei, minä en pidä tynkättä epätoivotta ja jot tynkkä epätoivo tekiti


minulle jotain pahaa, löitin ten heti aivan kuoliaakti."

Tähän nerokkaaseen huomautukseen päättyi keskustelumme tästä


asiasta, mutta minä ajattelin muutaman hetken huolestuneena,
voisivatkohan Helenan ja minun isoisän ajoittaiset henkiset häiriöt
ilmetä jälleen tässä hänen nuorimmassa jälkeläisessään. Ajatukseni
katkaisi Willy, joka rohkeasti huomautti:
"Nyt kai saamme pillit, Harry eno, vai kuinka." Otin varteen
huomautuksen ja vein heidät metsään. Vuosikausiin en ollut ollut
hakemassa pähkinäpuunvesoja, en todellakaan sittenkuin sodassa,
jolloin opin tietämään kuinka kuuman tulen saattoi saada pienistäkin
pähkinätikuista. En ollut etsinyt puuta pilleihin —
neljännesvuosisataan. Näiden muistojen mieleeni nostamat erilaiset
kuvat uhkasivat saattaa minut mielentilaan, joka olisi voinut
purkautua johonkin epäonnistuneeseen runotekeleeseen, mutta
sisarenpoikani estivät sen ahdistellen minua vilkkailla kysymyksillään,
kysymyksillä sellaisilla, joita ainoastaan lapset voivat tehdä. Pillit
valmistuivat, ja minut vietiin marssin tahdissa paikkaan, missä
"karitsat" kasvoivat. Se oli juuri sellainen paikka, johon pojat
tuntevat viehätystä — alava, kostea, soinen, puroineen, joka
petollisesti luikertelee ruohon ja tuuheitten sananjalkojen lomitse.
Lapset tunsivat jo kaukaa kasvin, jossa kasvoi "karitsoja" ja jokaista
uutta löytöä seurasi läpitunkeva riemuhuuto. Alussa katsahdin
nopeasti puroon päin, kun tuollainen kimakka huuto halkaisi ilman,
mutta kun vähitellen totuin siihen, kiintyi huomioni muutamiin
erinomaisen ihaniin sananjalkoihin. Äkkiä kuitenkin useat peräkkäin
kuuluvat huudot ilmaisivat, että jokin oli hullusti, ja suuren
sananjalan ylitse näin pienet, hätääntyneet kasvot. Willy riensi
veljensä avuksi, mutta oli hänkin pian vajonnut yhtä syvälle kuin
Toddy mustaan, puron pohjassa olevaan mutaan. Riensin hätään,
asetuin hajasäärin puron yli ja ojensin käden kummallekin pojalle.
Silloin antoi petollinen mätäs myöten ja minäkin pudota loiskahdin
sekaan. Tämä tapaus vaihtoi Toddyn surun nauruun, mutta en voi
sanoa, että onnettomuuteni tässä tapauksessa olisi huvittanut
minua. Putoaminen puhtaaseen veteen ei ole miellyttävää, ei edes
kalassa ollessa, mutta valkeissa housuissa äkkiä vajota polvia
myöten maaemon helmaan, se on eri asia. Nopeasti vedin lapset
ylös ja asetin heidät rannalle, sitten kompuroin itse ylös vihapäissäni
ja koetin päristellä, kuten olen nähnyt Newfoundlandilaiskoiran
tekevän. Päristeleminen ei kumminkaan ollut hyvä — sillä
housunlahkeena rupesivat kauheasti lyömään nilkkoihini, ja lähettivät
alas kenkiini inhoittavia liejuvesivirtoja. Vaaleanharmaa huopahattuni
oli pudonnut puron reunalle ja tullut aivan tahraiseksi, kun kiipesin
ylös vedestä. Katsoin nuorempaan sisarenpoikaani sanattomalla
suuttumuksella.

"Harry eno", sanoi Willy, "Jumala oli hyvä, kun antoi sinun olla
kanssamme, muutoin Toddy olisi hukkunut."

"Niin kyllä", sanoin, "ja enpä todellakaan olisi —"

"Hajji eno," huusi Toddy juosten nopeasti luokseni, ja, taivuttaen


minut itseään kohti, taputteli poskeani mutaisella, mustalla
kädellään. "Minä pidän tinutta, kun vedit minut vedettä."

"Annan sinulle anteeksi", sanoin, "mutta kiiruhtakaamme kotiin."


Meidän oli sivuutettava vain yksi ainoa talo ja se oli, Luojan kiitos,
niin tiheän pensaikon peitossa, etteivät asukkaat voineet nähdä tietä.
Kuljimme tosin yleisesti suosittua ajelutietä, mutta voisimmehan
ehtiä kotiin viidessä minuutissa, tai pujahtaa metsään, jos
kuulisimme vaunujen lähestyvän. Voi! Siellä jo tulivatkin vaunut, ja
me, me muodostimme niin surullisen näköisen ryhmän! Vaunuissa
istui naisia, ja vielä päälle päätteeksi — mutta olikohan siinä, tietysti
siinä oli — oliko paholainen, joka aina johti noita lapsia, lähettänyt
palvelijansa hakemaan neiti Maytonia, ennenkuin se ryhtyi toimeen.
Siinä hän nyt auttamattomasti istui, kylmänä, hienona, sievänä,
koettaen säilyttää mielenmalttinsa, vaikkakin sitä tehdessään
punastui. Ei auttanut, että loin katseeni maahan; hän oli jo tuntenut
minut. Käänsin häntä kohti kasvoni, joissa oli yhtä uhmaava, jos ei
uhmaavampikin ilme kuin sodassa käydessäni hyökkäykseen.

"Teillä näkyy olleen hauska iltapäivä yhdessä", sanoi hän tapansa


mukaan hymyillen vaunujen sivuuttaessa meidät. "Muistakaa kaikki
tulla luokseni huomenna."

Jumala siunatkoon tuota tyttöä! Hänen sydämensä toimi yhtä


nopeasti kuin hänen silmänsä — kuka muu nuori nainen tahansa olisi
tällaisessa tilaisuudessa tarvinnut kaiken tarmonsa nauramiseen,
mutta hän ennen muuta koetti helpoittaa minun asemaani. Sellainen
kuninkaallisen ylevä nainen ansaitsee — tässä äkkiä huomasin
kasvojeni lentävän kuumiksi mudan alla, jota Toddyn käsistä oli
niihin tarttunut ja minä johdin paluumatkaamme ryhdiltäni
komeampana kuin mitä ulkomuotoni oikein edellytti ja sitten minä
jätin sisarenpoikani palvelijalle samalla suuremmoisella
arvokkuudella, jolla upseeri luovuttaa suuren vangiksi ottamansa
sotilasjoukon. Nopeasti vaihdoin ryvettyneet vaatteet parhaaseen
pukuuni — ei siksi, että olisin toivonut ketään tapaavani, mutta siksi,
että äkkiä tunsin itsekunnioitukseni huimasti kasvaneen. Kun lapset
oli pantu makuulle, ja minulla oli vain omat ajatukset seuranani,
vietin pari onnellista hetkeä kuvittelemalla mahdolliseksi sellaista,
jota en koskaan ennen ollut uskaltanut ajatellakaan.
VII LUKU.

Vierailumme ja mitä siitä seurasi.

Maanantaina olin puutarhassa jo auringon noustessa. Tänään


Toddyn tuli viedä sovitukseksi tarkoitettu kukkavihkonsa neiti
Maytonille, ja minä lupasin juhlallisesti, ettei mitään vaivaa
säästettäisi, jotta hänen sovituksensa tulisi mahdollisimman
kauniiksi. Tarkastin huolellisesti jokaisen kukkareunuksen ja lavan,
jokaisen yksityisen kukkasen, niin että minulla viimein oli niiden
mahdollisuudet niin täysin selvillä, kuin olisin tehnyt musteella ja
kynällä niistä luettelon. Kun olin tämän tehnyt, neuvottelin
palvelijattaren kanssa sisarenpoikieni puvuista. Hän alisti koko
heidän pukuvarastonsa tarkasteluni alaiseksi, ja tutkisteltuani
tarkasti kaikkia valitsin ne, joihin poikien oli pukeuduttava
iltapäivällä. Sitten ilmoitin palvelijattarelle, että pojat lähtisivät
päivällisen jälkeen kanssani käynnille muutamien rouvashenkilöiden
luo ja että toivoin hänen pesevän ja pukevan lapset huolellisesti.

"Ilmoittakaa milloin haluatte lähteä, herra, ja minä alotan tuntia


aikaisemmin", sanoi hän. "Ainoastaan silloin voi olla vakuutettu,
etteivät he tuota teille häpeää."
Aamiaiseksi oli meillä muun muassa muhennettuja ostereita, joita
syötiin syviltä lautasilta.

"Voi Todd", huudahti Willy, "nyt on meillä taasen kilpikonnalautaset


— oi, kuinka hauskaa!"

"Ai, kilpikonnalautatet", kirkaisi Toddy.

"Mitä ihmettä te tarkoitatte, pojat?" kysyin minä.

"Näytän sinulle", sanoi Willy hypäten alas tuoliltaan ja kantaen


osterilautastaan varovasti minua kohti. "Pistä pääsi lautaseni alle ja
katso ylös, silloin näät kilpikonnan."

Hetkeksi unohdin, etten ollut ravintolassa, tartuin lautaseen,


kohotin sitä ja tarkastin sen pohjaa.

"Tuossa", sanoi Willy osoittaen tehtaanleimaa, moniväristä


tavaramerkkiä. "Etkö näe kilpikonnaa?"

Komensin Willyn heti paikalleen, tunnottomana Toddyn


huomautukselle, että —

"Tiellä on kilpikonnia, mutta ne eivät otaa jyömiä eteenpäin niin


kuin muut kilpikonnat."

Aamiaisen jälkeen kiinnitin milt'ei koko huomioni itseeni.


Vaatevarastoni ei ole milloinkaan tuntunut niin köyhältä ja huonosti
varustetulta; en koskaan ole niin monta kertaa haavoittunut partaa
ajaessani, en ole koskaan käyttänyt niin kunnotonta
kengänmustetta. Lopuksi luovuin epätoivoissani kaikista yrityksistä
esiintyä hienona ja omistin aikani ja ajatukseni kukkakimpulle.
Poimin niin paljon kukkia, että niillä olisi voinut koristaa kokonaisen
kirkon ja armotta hylkäsin jokaisen, joka ei ollut ihan täydellinen.

"Hajji eno", sanoi Toddy, "onko taivaattakin näin kauniita kukkia?


Millä enkelit tiellä muuten leikittelitivät, jollei kukkatilla."

"Harry eno", sanoi Willy, "kun lehdet liikkuvat ylös ja alas ja


lepattavat, niin puhuvatko ne siiloin tuulen kanssa?"

"Minä — minä luulen niin, poikaseni."

"Kenelle teet tätä kimppua, Harry eno?" kysyi Willy.

"Eräälle rouvashenkilölle, neiti Maytonille, samalle joka näki meidät


eilen niin savisina", sanoin minä.

"Oi, minä pidän hänestä", sanoi Willy. "Hän on niin sievä ja soma
— aivan kuin leivos — aivan kuin hän maistuisi hyvälle — oi, minä
rakastan häntä niin, etkö sinäkin?"

"Kyllä, minä tunnen häntä kohtaan suurta respektiä, Willy."

"Respektiä? Mitä sinä tarkotat respektillä?"

"Niin, tarkoitan sillä sitä, että hän on hieno nainen — hyvin


miellyttävä nainen — maailman kaunein nainen — juuri sellainen
henkilö, jonka haluaisin nähdä joka päivä ja kernaammin kuin
kenenkään muun."

"Niin no, sitten respekti tarkoittaa samaa kuin rakastaa, eikö


tarkoitakin, Harry eno?"

"Willy", sanoin äkkiä nopeasti, "juokse pyytämään Maggielta


nyörinkappaletta — nopeasti!"
"Kyllä", sanoi Willy lähtiessään; "mutta tarkoittaahan, eikö
tarkoita?"

Kello kahdelta käskin Maggien pukemaan sisarenpoikani ja kello


kolme lähdimme vierailulle. Ei ollut helppoa kantaa Toddyn
kukkavihkoa ja samalla pitää kummastakin pojasta kiinni, etteivät he
pääsisi pensaikkoon heinäsirkkoja etsimään tai pellonpientareelle
perhosia kiinni ottamaan, mutta suoriuduin siitä onnellisesti.
Lähestyessämme Clarksonin täysihoitolaa tunsin, että lakkini oli
toisella korvalla ja kaulaliinani vinossa, mutta en voinut korjata niitä,
sillä näin Alice Maytonin kuistilla ja tunsin, että hän näki minut.
Annoin kukkakimpun Toddylle ja lupasin hänelle kolme
rintasokeripalasta, jos hän olisi varovainen eikä pudottaisi sitä. Niin
astuimme puutarhaan. Samassa hetkessä kuin tulimme pensasaidan
sisäpuolelle ja Toddy näki miehen kantavan ruohonleikkauskonetta
ruohokentän poikki, huusi hän:

"Voi, tuolla on juohonleikkuukone!" ja pudotti innoissaan


kukkakimpun. Sieppasin sen käteeni ennenkuin se putosi maahan,
pakoitin tuon sopimattomasti käyttäytyvän nuorukaisen astumaan
edelleen, tervehdin neiti Maytonia ja käskin Toddyn ojentamaan
kimpun hänelle. Tämän hän onnellisesti suorittikin, mutta kun neiti
Mayton kiitti häntä ja kumartui häntä suutelemaan, hän luikahti alas
kuistilta kuin pieni ankerias, huusi "tule!" veljelleen ja hetkeä
myöhemmin sisarenpoikani seurasivat ruohonleikkauskonetta
jälkijoukkona kunnioittavan välimatkan päässä.

"Nuo ovat sisareni mielestä maailman parhaimmat lapset, neiti


Mayton," sanoin minä.

"Niitä pikku miehiä!" vastasi neiti Mayton, "minusta on niin hauska


nähdä lasten huvittelevan."
"Niin minustakin", sanoin minä, "kun en ole vastuunalainen heidän
hyvinvoinnistaan; mutta jos olisin suunnannut kaikki ne
ponnistukset, jotka näiden poikien vuoksi olen tehnyt, isäntieni
etujen valvomiseen, niin nuo arvon herrat voisivat pitää minua
korvaamattomana."

Neiti Mayton vastasi jotakin, ja me istuuduimme alkaen iloisesti


keskustella yhteisistä tutuista, kirjoista, tauluista, musiikista ja
seurapiirimme juoruista. Olisin voinut iloisesti keskustella Herbert
Spencerin järjestelmästä, assyyrialaisista savitauluista tai mistä
muusta ikävästä asiasta tahansa ja tuntea, että hänen läsnäolonsa
moninkertaisesti korvasi kaiken. Kauniina, järkevänä, tyynenä,
aistikkaasti puettuna, halveksien keimailua ja hänen seurapiirissään
niin tavallista elämäänkyllästymistä, hän herätti koko miehisen
ihailuni. Mutta voi! Ehkäpä en ansainnut niin suurta iloa, koska se
loppui niin lyhyeen. Clarksonilla asui muitakin naisia täysihoidossa ja,
kuten neiti Mayton ensi kerran tavatessamme aivan oikein
huomautti, miehet olivat Hillcrestissä sangen harvinaisia. Naiset
tulivat, tietystikin aivan sattumalta, kuistille ja jokainen heistä
esitettiin minulle ja tavallinen kohteliaisuus ei sallinut minun
puhutella neiti Maytonia enemmän kuin kerran kymmenen minuutin
aikana. Aina muulloin ja kaikissa muissa tilaisuuksissa olisi näin
monen naisen seura ollut minulle erinomaisen miellyttävää, mutta
nyt —

Yht'äkkiä kajahti yhteishuuto ruohokentältä, ja kaikki naiset


hypähtivät pystyyn. Seurasin heidän esimerkkiänsä ja purren
hampaani lujasti ja julmasti yhteen toivoin, että se sisarenpojistani,
joka siellä oli loukkaantunut, olisi loukkaantunut oikein pahoin.
Näimme Toddyn juoksevan meitä kohden käsi suussa Willyn
juostessa hänen rinnallaan lohdutellen:
"Toddy parka! Älä itke! Koskeeko kovasti? Älä ole milläsikään.
Harry eno lohduttaa sinua. Älä itke, Toddy kulta!"

Pojat olivat ehtineet kuistin luo ja kiipesivät portaita ylös Willyn


selitellessä:

"Voi Harry eno, Toddy pisti sormensa ruohonleikkauskoneen


pieneen pyörään ja se liikahti vain aivan, aivan vähän, ja se se
häneen koski."

Mutta Toddy juoksi minun luokseni, tarttui sääriini ja nyyhkytti:

"Laula Toddy mihin joutunut."

Vereni jähmettyi. Olisin voinut kuristaa kuoliaaksi tuon kauhean


lapsen, vaikka hän näyttikin kärsivän. Kumarruin hänen puoleensa,
hyväilin häntä, lupasin hänelle rintasokeria, otin esiin kelloni ja
annoin hänen sillä leikitellä, mutta hän kertasi vain yhä samaa
pyyntöänsä. Eräs neideistä, yksinkertaisin joukosta tarjoutui
sitomaan sormen, ja sisimmässäni minä siunasin häntä, mutta Toddy
vain pyysi yhtä itsepintaisesti: "Toddy minne joutunut", ja nyyhkytti
surkeasti.

"Mitä hän sillä voi tarkoittaa?" kysyi neiti Mayton.

"Hän tahtoo, että Harry eno laulaisi hänelle laulun, joka alkaa:
'Ken tietää, minne joutunut'", ilmoitti Willy. "Hän tahtoo että tätä
laulua lauletaan aina, kun hän on jollakin tavoin satuttanut itsensä."

"Oi, laulakaa se hänelle, herra Burton", pyysi neiti Mayton, ja


kaikki muutkin naiset pyytelivät: "Oi laulakaa."
Vihaisena nostin Toddyn syliini ja hyräilin kysymyksessä olevan
laulun säveltä.

"Ittu keinutuoliin", nyyhkytti Toddy.

Tottelin; ja senjälkeen kiusanhenkeni sanoi:

"Ethän laula tanoja — tahdon, että laulat tanat."

Lausuin sanat niin hiljaa kuin mahdollista huulet kiinni hänen


korvassaan, mutta hän tokasi:

"Laula kovemmin."

"En osaa enempää, Toddy", sanoin epätoivoissani.

"Voi, eno, luen sen sinulle kokonaan", sanoi Willy.

Ja siellä, sellaiselle kuulijakunnalle hänen edessään täytyi minun


laulaa tuo turhanaikainen laulu säe säkeeltä Willyn perässä.
Hampaat lujasti yhteenpuristettuina, otsa kosteana katselin Toddya,
ja hirmuiset ajatukset risteilivät aivoissani. Ei kukaan nauranut —
olin niin epätoivoinen, että pieninkin nauruntyrskähdys olisi tuntunut
helpotukselta. Äkkiä kuulin jonkun kuiskaavan:

"Katso, kuinka hän pitää pojasta! Mies poloinen! — hän on


äärettömästi huolissaan pikku pojan tähden!"

Jos laulu ei olisi juuri tällä hetkellä itse luonnollisella tavalla


loppunut, olisin heittänyt haavoittuneen sisarenpoikani kuistin
kaidepuun ylitse. Näin ollen asetin hänet seisomaan ja selitin, että
meidän täytyi lähteä ja aloin jo jättää jäähyväisiä, kun neiti Maytonin
äiti pyysi meitä jäämään päivälliselle.
"Mitä minuun itseeni tulee, rouva Mayton, niin tuottaisi se minulle
iloa", sanoin minä, "mutta sisarenpoikani ovat tuskin vielä oppineet
seuratapoja. Pelkään, ettei sisareni antaisi anteeksi, jos hän saisi
tietää, että olen ottanut heidät mukaani päivälliskutsuille."

"Oi, minä pidän kyllä pienokaisista huolen", sanoi neiti Mayton.


"Olen varma siitä, että he viihtyvät kanssani."

"En voisi millään muotoa olla niin epäystävällinen, että antaisin


teidän sitä koettaa", vastasin minä.

Mutta hän oli järkähtämätön ja ilo, jota tunsin mukautuessani


hänen tahtoonsa, oli niin valtava, että olisin voinut panna
enemmänkin alttiiksi. Neiti Mayton istuutui siis päivällispöytään Willy
toisella ja Toddy toisella puolella. Minun paikkani oli onneksi heitä
vastapäätä, niin että saatoin antaa heille varoitusmerkkejä ja
paljonpuhuvia silmäyksiä. Tarjottiin lientä. Annoin pojille merkin, että
he pistäisivät lautasliinan leuvan alle ja käännyin sitten
puhuttelemaan oikealla puolellani istuvaa neitiä. Hän taivutti
kohteliaasti päätään minua kohti, mutta hänen ajatuksensa tuntuivat
olevan muualla. Kun seurasin hänen katsettaan, näin nuoremman
sisarenpoikani, joka piteli liemilautastaan ylhäällä ojennetuin käsin
pää leväten pöydällä ja katse kiinteästi ylöspäin kääntyneenä. En
uskaltanut sanoa sanaakaan, muutoin hän olisi pudottanut
lautasensa. Äkkiä hän vetäsi päänsä takaisin, hymyili enkelimäisesti,
kallisti lautastaan niin että osa sen sisällöstä etsi turvaa neiti
Maytonin kauniin, lumivalkean puvun laskoksissa, ja huudahti:

"Voi-vooii- minun lautatettani on kilpikonna, katto Willy, minun


lautatettani on kilpikonna."

You might also like