I found the following post that had an answer for the same problem:
The cause of this problem is that in
RC and RTM validation no longer lazy
loads any properties. The reason this
change was made is because when saving
a lot of entities at once that have
lazy loaded properties validation
would get them one by one potentially
causing a lot of unexpected
transactions and crippling
performance.The workaround is to explicitly load
all validated properties before saving
or validating by using .Include(), you
can read more on how to do this here:
http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx
My take on this is that is a pretty crappy proxy implementation. While unnecesarily walking the object graph and retriveing lazy-loaded properties is naturally something to be avoided (but apparently overlooked in Microsoft’s first incarnation of EF), you shouldn’t have to need to go un-proxying a wrapper to validate that it exists. On second thoughts, I’m not sure why you need to go walking the object graph anyway, surely the change tracker of the ORM knows what objects require validation.
I’m not sure why the problem exists, but I’m sure I wouldn’t be having this problem if I was using say, NHibernate.
My ‘workaround’ – What I’ve done is define the Required nature of the relationship in a EntityTypeConfiguration class, and removed the Required attribute. This should make it work fine. It means that you will not validate the relationship, but it will fail the update. Not an ideal result.