What makes O/R mappers like LINQ to SQL extremely flexible
is that they enable us to easily model cross-table relationships across our
data model. For example, I can model each Product to be in a Category,
each Order to contain OrderDetails for line-items, associate each OrderDetail
line-item with a Product, and have each Customer contain an associated set of
Orders. I covered how to construct and model these relationships in Part 2 of this blog series.
LINQ to SQL enables me to take advantage of these
relationships for both querying and updating my data. For example, I could
write the below code to create a new Product and associate it with an existing
"Beverages" category in my database like so:
Note above how I'm adding the Product object
into the Category's Products collection. This will indicate that there is
a relationship between the two objects, and cause LINQ to SQL to automatically
maintain the foreign-key/primary key relationship between the two when I call
For another example of how LINQ to SQL
can help manage cross-table relationships for us and help clean up
our code, let's look at an example below where I'm creating a new Order for an
existing customer. After setting the required ship date and freight costs
for the order, I then create two order line-item objects that point to the
products the customer is ordering. I then associate the order with the
customer, and update the database with all of the changes.
As you can see, the programming model for performing all of
this work is extremely clean and object oriented.