我想在我的应用程序中使用MVC 3和Entity Framework。
模型将存储在不同的程序集中,而非MVC应用程序中。
我要做的选择是使用EF生成我的实体或使用Code First。
如果使用Code First,我可以使用[Required]等装饰成员。但是,如果EF从数据库生成实体,我该如何添加这些属性?
使用EF生成我的实体将节省很多时间,但我希望MVC可以根据我已经装饰过的成员自动填充验证。这有意义吗?如果是这样,我该怎么做呢?
我想在我的应用程序中使用MVC 3和Entity Framework。
模型将存储在不同的程序集中,而非MVC应用程序中。
我要做的选择是使用EF生成我的实体或使用Code First。
如果使用Code First,我可以使用[Required]等装饰成员。但是,如果EF从数据库生成实体,我该如何添加这些属性?
使用EF生成我的实体将节省很多时间,但我希望MVC可以根据我已经装饰过的成员自动填充验证。这有意义吗?如果是这样,我该怎么做呢?
在这种情况下,可以使用MetadataTypeAttribute。您可以将其与部分类组合以实现所需的结果。
顺便说一下,在您决定使用数据库优先(Database First)和代码优先(Code First)设计之间时,我建议您进行更多的研究。这不仅仅是为了节省生成实体的时间,在这两种方法之间还有很大的差异。为了节省时间,您可以使用EF Power Tools从数据库生成代码嵌入式实体,非常简单。
看这个: 在您的模型模板(扩展名为model.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;
。
希望这能帮助到您。