Compare and contrast the philosophies of the different ORMs. Also look at the technical implementation, design decisions, and difficulties.