我目前正在进行我的第一个MVC项目,它只不过是一个美化的博客,用于我自己的学习目的。我从数据库优先的方法开始,因为当时我甚至不知道代码优先的存在。这让我对如何处理验证感到困惑。
我在数据库中有一个Articles
表,它有一个由EF为我生成的相应的Article
类。我还有一个ArticleViewModel
类,它对Article
中的每个属性都有一个匹配的属性。虽然我有简单的CRUD操作,但他们目前使用的是强类型Article
模型,而不是ArticleViewModel
,并且没有进行数据验证。
在今天做了一些研究来评估我的选择后,我发现了以下问题和这篇博客文章。因此,看起来我可以将MetadataType
属性应用于EF生成的类,并将我的验证放在那里,但我一直读到,包含验证的伙伴类是不好的做法。我不知道为什么会这样,但如果是这样的话,这是否意味着我应该忽略好友类并做以下事情?
[MetadataType(typeof(ArticleViewModel))]
public partial class Article
{
public Article(ArticleViewModel avm)
{
// Copy the properties from the ArticleViewModel into an Article.
}
}
然后根据需要将DataAnnotations应用于ArticleViewModel,并更新我的控制器/视图以使用ArticleViewModel
?
提前感谢您的任何意见。:(
是的,我最近学会了这种方法!这是一个很好的实践,只要你不介意涉及额外的代码。请参阅在asp.net mvc 3中,您将验证放在哪里?了解更多详细信息以及代码示例的公认答案。