使用实体框架模型/数据库进行MVC3验证

时间:2011-07-21 11:09:11

标签: asp.net-mvc entity-framework

我想在我的应用程序中使用MVC 3和实体框架。

模型将存储在与MVC应用程序不同的程序集中。

我正在做的选择是使用EF生成我的实体或首先使用代码。

首先使用代码,我可以使用[Required]等装饰成员...但是,如果EF已从DB生成实体,我将如何添加这些属性?

让EF生成我的实体将节省大量时间,但我希望MVC自动填充验证,具体取决于我如何装饰我的成员。这有意义吗?如果是这样,我该怎么做?

3 个答案:

答案 0 :(得分:11)

在这种情况下,使用MetadataTypeAttribute。您可以将它与部分类组合以实现所需的结果

顺便说一句,在你决定使用Database First和Code First设计时,我会做更多的研究。这一切都不是为了在生成实体时节省时间,这两种方法之间存在更多差异。为了节省时间,您可以使用EF Power Tools从数据库生成代码优先实体 - 简单。

答案 1 :(得分:2)

比自动生成实体更好,我建议您使用Code First或将现有数据库映射到POCO的类(不生成实体,只需手动创建它们并将它们映射到现有数据库)

Scottgu撰写了关于using EF "Code First" with an existing database的文章。

答案 2 :(得分:1)

检查一下: 在您的模型模板(扩展名为.tt的文件)中,您可以破解此模板以生成装饰器,在此示例中,我添加了[Required]装饰器以及错误消息

var simpleProperties = typeMapper.GetSimpleProperties(entity);
if (simpleProperties.Any())
{
    foreach (var edmProperty in simpleProperties)
    {
        if(!edmProperty.Nullable)
        {#>
[Required(ErrorMessage="<#=String.Format("The field {0} is required",edmProperty.ToString())#>")]<#
        }#>
<#=codeStringGenerator.Property(edmProperty)#><#
    }
}

所以结果是这样的

    [Required(ErrorMessage="The field Id is required")]
    public long Id { get; set; }

PS:你也可以添加 using System.ComponentModel.DataAnnotations;编辑模板。

希望这可以帮助你。