2

我使用的是 EF 4.x 数据库优先方法。我有 edmx 文件,它生成了从 EntityObject 派生的 C# 类。我有一个使用生成的类作为模型的 ASP.NET MVC 4 应用程序。验证必填字段的客户端验证工作正常。

现在我转移到 EF 5 并使用 DbContext 生成器,它生成 POCO C# 类。我发现必填字段验证不再适用于 EF 5。

我认为问题在于在 EF 4.x EntityObject 生成器中,生成的类具有[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]属性。但是在 EF 5.x POCO 类中,不会生成数据注释属性。因此,必填字段信息丢失。

所以我的问题是:

  1. 为什么 EF 5.x DbContext 生成器不 [Required]从 edmx 文件生成注释?
  2. 放置这些数据注释的正确位置在哪里?我应该修改 .tt 文件以生成 [Required] 属性吗?还是手动编写一个 [MetadataType] 分部类,在单独的类中定义数据注解属性?
4

2 回答 2

0

1)我不知道为什么。我只知道 Db-first 方法不会向属性添加任何数据注释。

2)确实创建了一个单独的部分类!是一个例子。因为每次更新模型时 EF 都会覆盖并重新生成所有 POCO 类,所以对这些类的任何更改(以及数据注释)都将丢失......

于 2013-08-20T08:54:28.423 回答
0

也许您会发现此链接很有用。 EF 验证 只需添加具有所需验证的 Metadata 类:

[MetadataType(typeof(UserMetadata))
public partial class User
{
  ...
}
public class UserMetadata
{
    [UserValidate("State")]
    public string State; 
   // etc.
}

希望这可以帮助

于 2016-11-07T21:59:16.660 回答