Should I add the virtual keyword to my primary key properties?
After reading about lazy loading, change tracking and the virtual keyword, I realized that I pretty much should have all my properties marked virtual. I am not so sure about my ID properties though, as it makes no sense to load an entity without ID, it would only serve the purpose of more efficient change tracking.
Do you want a change tracking proxy? If so, you must have the virtual keyword on all your properties.
See this blog post by a member of the EF team