It's very common in .NET for an exception to be wrapped in several layers of "outer exceptions" which give marginally more contextual data. For example, in EF if your update fails, you get exceptions wrapped similar to this:
The data I need to understand what failed is almost always in the
SqlException, so what's the advantage to the other two? What if I was using EF inside a custom library, should I wrap this exception with one of my own? Like
MyCustomLibraryException: Could not update the data. See inner exception for details.