我想为我的应用程序使用MVC 3和实体框架。使用实体框架模型/数据库首先进行MVC3验证
该模型将存储在与MVC应用程序不同的程序集中。
我正在做的选择是使用EF来生成我的实体或首先使用代码。
随着代码第一,我可以用[必填]等装饰成员......但如果EF已经从数据库中生成实体,我将如何去添加这些属性?
让EF生成我的实体会节省很多时间,但是我希望MVC自动填充验证,具体取决于我如何装饰我的成员。这有意义吗?如果是这样,我该怎么做?
我想为我的应用程序使用MVC 3和实体框架。使用实体框架模型/数据库首先进行MVC3验证
该模型将存储在与MVC应用程序不同的程序集中。
我正在做的选择是使用EF来生成我的实体或首先使用代码。
随着代码第一,我可以用[必填]等装饰成员......但如果EF已经从数据库中生成实体,我将如何去添加这些属性?
让EF生成我的实体会节省很多时间,但是我希望MVC自动填充验证,具体取决于我如何装饰我的成员。这有意义吗?如果是这样,我该怎么做?
在这种情况下,使用MetadataTypeAttribute。您可以将其与部分类组合以实现预期的结果
顺便说一下,在您决定使用Database First和Code First设计之间的时候,我会做更多的研究。这一切都不是关于生成实体时节省时间,这两种方法之间的差异更大。为了节省时间,您可以使用EF Power Tools从数据库生成代码优先实体 - 很简单。比汽车
更好地生成你的实体,我建议你使用代码优先或现有的数据库映射到POCO的类(不产生实体,只是用手工创建它们,并将它们映射到现有的数据库)
Scottgu写了关于using EF "Code First" with an existing database。
检查了这一点: 在你的模型模板(扩展model.tt文件),你可以破解这个模板生成的装饰,在这个例子中,我添加[必填]装饰加上一条错误消息
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;
。
希望这可以帮助你。
谢谢,当我这样做时,我得到暧昧的名称错误。这里是我在我的部分类(该实体称为模型中的项目)中的内容: – Paul
[MetadataType(typeof(Item))] public partial class Item { [StringLength(10),必需] public字符串MaterialName { get; 集; } } – Paul
保罗,模糊'可能'与预先存在的edmx ef文件可能? –