In a previous question, @Darin Dimitrov answered:
In your case the worst thing is that
you are using your Linq2Sql models
inside your views and that’s one of
the worst anti-patterns I see people
doing in ASP.NET MVC applications. You
absolutely should be using view
models. That’s what views should be
passed from controllers and that’s
what controllers should get from
views.
Why is it so bad to pass Linq2Sql objects as Models?
There are a lot of reasons why it’s bad to pass Linq2Sql objects as models to your views and controllers, and it would be relatively difficult to cover all of them in a single answer. So, here are my top 3:
Separation of Concerns – Linq2Sql objects have DAL logic embedded in them, which is a violation of SoC. Also, you will likely want to validate data passed from your views, which should be done in the Model (NOT the controller!). However, if you add this logic to your L2S models then you also violate SoC (not to mention the fact that your validations will be wiped out if you regenerate your L2S models)
Encapsulation – Your L2S classes have a lot of members that your view(s) and controller(s) likely do not need access to. A proper model would encapsulate these members to keep them inaccessible.
Maintainability and Reusability – At some point you may decide you want to change your backing store. If you use your L2S classes as models then you’ll end up touching a LOT of code to make that change, whereas if you roll your own models then you’ll only have to worry about changing your models and nothing else. Also, not messing with your L2S models (see SoC above) means that they’re reusable across projects.