In the last article I explained how to set up an ASP.NET MVC 2 project with a Db4o backend to create a weblog application. In the spirit of Domain Driven Design we created a single entity 'Story'. We managed to create a separate class for database access. We did not however, implement the Unit of Work or the Repository pattern. We'll get to that later. Let's have a working application first and we'll build in the abstractions later.

So, we created a StoryController in the Controllers folder and we implemented the Create method. After clicking Submit the method takes us to Index:

datienaarindex

So we need to go to line 19 and right click on Index and click Add View, just like before:

datienaarindexview

And then we can scaffold the Index View like this:

index

Here is the code to list all the Story entries in the database:

public ActionResult Index()
        {
            //instantiate the db4o objectcontainer:
            IObjectContainer db = MySingleInstance.Instance().
                OpenDataBase();

            try
            {
                //this is the tricky part.
                //We select all the Story objects from the db:
                var query = from Story s in db select s;
                //And we'll add that to a list:
                List allStories = new List();
                foreach (Story story in query)
                {
                    allStories.Add(story);
                }
                //We'll present the List to the View
                return View(allStories);
            }
            finally
            {
                //Close the database.
                db.Close();
            }
        }

Why am I copying the query result to a List? The answer is, if I don't, the database closes before the page is displayed, so the page remains empty and we'll get a DataBaseClosed Exception.

Now run the application (hit F5) and browse to http://localhost:portnr/Story.

List

And we see all our entries. If you click Create New, you'll be directed to the form we made in part 1 and you can add another blog article. So basically the weblog application is ready, right?

The only thing is, it looks like shit. And I am no designer. So let's grab a nice minimalist CSS template from the web. I googled 'minimalist elegant css' and came across Inkcover. The css of this site is a bit cluttered and it's derived from a templating engine from Coldfusion I believe. But with a little hacking it came out quite nice.

Ik Zeg..

I'll think I'll have to notify the designers.

Next time I will cover validation at last. And perhaps upload the code.