Child pages
  • Properties and property attributes (Location class)
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

A domain class is - first and foremost - a
set of typed properties. These properties require
annotations, as explained on this related page:
domain object class.

Our Location includes string properties

  • Street
  • Number
  • City

String properties should be attributed to give
dbschema.exe important clues on how these properties
should be constrained in the database. After all,
domain objects can be persisted. What's more
BOC controls also enforce those constraints.

As you might guess, [ StringProperty ]'s property
MaximumLength specifies the maximum string length.
The Street's maximum length is not only generated
into the database script (see dbschema.exe), it is
also inforced by re-bind, or, the particular BOC control
receiving a Street value in an edit form. The
BOC control will not let the user input a string
longer than 60 characters.

re-motion derives the characteristics of nullability
directly from the .NET types. string-s are nullable,
but what if don't want that for our application?
An address without a Street name is not any good,
that's why we override the string type's nullability
with the property Nullable=false in the [ StringProperty ]

Country? clearly is nullable, so a country enum is
not mandatory, neither in the database nor in edit forms.
int - the type of the ZipCode property - is
mandatory, and that's how it is mapped to both the
database schema and the user interface.

The [ DBColumn ] attribute renames the property for
the database. If not told otherwise, re-store takes the
name of the property as name for the column in the database.
The table itself is named after the class.

For our Location class this means that the Location
table will contain these columns:

  • Street
  • City
  • Country
  • ZipCode
  • there won't be a Number column, because we renamed it;
    the column will be named LocationNumber

Note that all properties here are virtual. This is not
an accident, this is a requirement, as explained here:

The [ MultiLingualResources ] attribute is discussed in a
later section, when we cover globalization: FIXME.

  • No labels