Lazy Loading is the idea of providing an objects related information only when you actually need it, instantiating related objects and populating its properties when its first requested and not before. This reduces the amount of processing power required by giving you what you ask for in smaller bites (or should i say Bytes).
You should be aware that there are potential problems with Lazy Loading. If you have a lot of records in a collection (a.k.a. List or ObservableCollection) and you lazily load a releated property, lets say so that a column in that related table can be displayed in a DataGrid, then this can have a big (negative) impact on performance. Read my related post When ORM Becomes a Problem.
The cause of this performance hit is the fact that you have to do subsequent SQL queries to load the related properties. So if you're showing 500 records in a DataGrid and one of the Columns is the "Name" field from a related table (via the Foreign Key relationship in the database) than you will end up executing 501 SQL queries. 1 to get the initial 500 records and 500 to get the additional "Name" property. As you can imagine this may be a big problem so use caution.
There are 4 ways lazy loading can be implemented
PS: These definitions are from
Wikipedia
Lazy Initialization: The object to be lazily loaded is initially set to NULL, and every request for the object checks for NULL and creates it “on the fly” before returning it first
Virtual Proxy: a virtual proxy is an object that “looks like” the object that is to be lazily loaded. Both the object and the proxy implement the same interface, with the proxy providing a wrapper that instantiates and initializes the object when one of its properties is accessed for the first time
Ghost: a ghost is the object that is to be loaded in a partial state. It may only contain the objects identifier, but it loads its own data the first time one of its properties is accessed.
Value Holder: a value holder is a generic object that handles the lazy loading behavior, and appears in place of the object’s data fields.
Most Object Relational Mapping system take advantage of Lazy Loading, which is an added benefit and one more incentive to using ORM software factory systems, but you really do need to think carefully about the amount of use your system will get (a.k.a. the number of concurrent users) and the benefits and disadvantages each ORM system you're considering may have.
See Wikipedia's and MSND's articles on Lazy Loading to learn more.
Some ORM Systems worth looking at are: