实体框架5.x数据注释

时间:2013-08-19 02:05:17

标签: entity-framework asp.net-mvc-4 entity-framework-4 entity-framework-5 ef-database-first

我使用的是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生成器 来自edmx文件的[Required]注释?
  2. 哪里是正确的地方 把这些数据注释?我应该修改.tt文件来生成 [必需]属性?或者手动编写[MetadataType]部分 在单独的类中定义数据注释属性 类?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

也许你会发现这个链接很有用。 EF Validation 只需添加Metadata类并进行必要的验证:

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

希望这可以提供帮助