我使用的是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类中,不会生成任何数据注释属性。因此,所需的字段信息丢失。
所以我的问题是:
- 为什么EF 5.x DbContext生成器不生成来自edmx文件的
[Required]
注释 - 哪里是合适的地方放置这些数据注释?我应该修改.tt文件以生成[必需]属性?或者手动写入[MetadataType]部分在单独的阶级
1)我不知道为什么。我只知道Db-first方法不会向属性添加任何数据注释。
2) 确实创建了一个单独的分部类!下面是一个例子。因为EF每次更新模型时都会覆盖并重新生成所有POCO类,所以对这些类的任何更改(以及数据注释)都将丢失。。。
也许您会发现这个链接很有用。EF验证只需添加具有所需验证的元数据类:
[MetadataType(typeof(UserMetadata))
public partial class User
{
...
}
public class UserMetadata
{
[UserValidate("State")]
public string State;
// etc.
}
希望这能帮助