我想在我的应用程序中使用MVC 3和实体框架。
模型将存储在与MVC应用程序不同的程序集中。
我正在做的选择是使用EF生成我的实体或首先使用代码。
首先使用代码,我可以使用[Required]等装饰成员...但是,如果EF已从DB生成实体,我将如何添加这些属性?
让EF生成我的实体将节省大量时间,但我希望MVC自动填充验证,具体取决于我如何装饰我的成员。这有意义吗?如果是这样,我该怎么做?
答案 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;
编辑模板。
希望这可以帮助你。