我目前正在开展我的第一个MVC项目,这个项目仅仅是为了我自己的学习目的而得到的美化博客。我开始使用数据库优先方法,因为我不知道代码优先甚至在那时存在。这让我对如何处理验证感到困惑。
我在数据库中有一个Articles
表,它有一个由EF为我生成的相应Article
类。我还有一个ArticleViewModel
类,它具有Article
中每个属性的匹配属性。虽然我有简单的CRUD操作,但它们目前使用强类型Article
模型而不是ArticleViewModel
,并且没有进行数据验证。
在今天进行一些研究以评估我的选项后,我发现了following questions和this博文。所以看起来我可以将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
?
提前感谢任何输入。 :)
答案 0 :(得分:3)
是的,我最近了解到这种方法!这是一个很好的做法,只要你不介意附加的代码。有关详细信息和代码示例的已接受答案,请参阅Where do you put your validation in asp.net mvc 3?。