I've spent a long time trying out different approaches to this problem. In its simplicity it's possible and very easy with Entity Framework to use the data classes as domain classes as well.
My experience is that in small projects you can get away with using your EF classes as your domain classes. This is fast and simple, however as the projects grow larger this start to become and issue since you can't control the access in any way.
The most common scenario is when exposing navigation properties on EF classes. Your whole application will now be able to navigate your entire data set. So with this model you give up all control over your data and domain objects.
There are several advantages to having your domain classes separately from EF. First of all you will not be as heavily tied to EF or code-first. With a level of separation/indirection you will be able to swap out your data framework should you desire so. Secondly you are able to control your data much more effectively.
Personally I've reached a pragmatic point where I take this decision at the start of every project. If the project is small and contained then I might avoid this extra abstraction in favor of simplicity. In almost ever medium-large and/or large project I've the separation.