Heat the oil in a large saucepan over a low heat. Add the onion and fry gently for 5 minutes. Add the carrots, celery and garlic and cook for a further 5 minutes until the onion is soft and just beginning to colour.
Turn up the heat a little, then add the beef and cook, stirring and breaking up the meat with a wooden spoon until browned and crumbly. Add the mushrooms and cook for 1 more minute. Stir in the stock, wine or extra stock, tomatoes, tomato puree and dried herbs. Bring to the boil, then cover and gently simmer over a low heat for 45 minutes, stirring occasionally. Stir in the parsley and season to taste.
Preheat the oven to 180C. To make the sauce, mix the cornflour to a smooth paste with a little of the milk. Heat the remaining milk to boiling point, then pour some of it on to the cornflour mixture, stirring. Return this to the milk in the saucepan. Bring to the boil, stirring until the sauce thickens, then simmer for 2 minutes. Stir in the nutmeg and season to taste.
Spoon half the meat sauce over the base of a 3-litre oven proof dish or baking tin. Cover with a layer of lasagne, then spoon over the remaining meat sauce and cover with another layer of pasta. Pour over the white sauce to cover the lasagne completely. Scatter over the grated cheese.
Place the dish on a baking sheet and bake for 40-45 minutes until the lasagne is bubbling and the top is lightly browned. Remove from the oven and leave to settle for 10 minutes before serving.