You can't do everything through a view. Sometimes you want your reads coming through stored procedures as well.
Keeping the data access out of the business objects makes unit testing easier.
If you need to serialize your business objects (by putting them in a session, for example) you can't have references to non-serializable objects in them, like database connections and the like.
There's also a lot of management that goes into the data access, like transactions, exceptions, and so on. A good deal of the code associated with data access is managing this stuff, and a data manager lets you do that centrally as opposed to having things scattered across umpty million business objects.