使用数据库优先模型(EF 5)为模型添加验证

4

我知道如何将验证错误添加到模型状态中,也知道如何将验证注释添加到我的模型类中。问题是对于数据库优先,我不想触及生成的代码,因为当我重新生成时,我会失去自定义内容。我总是尝试在部分类中进行自定义,但是无法向现有属性的部分类中添加注释。

这里的最佳实践是什么?


我应该补充说明,目前我的做法是创建一个ViewModel,但这感觉有点多余,尤其是因为我已经在Knockout JS中创建了一个ViewModel。 - sheamus
2个回答

1
你需要利用 MetadataTypeAttribute
按以下方式进行操作:
创建一个新的类文件,将其保留在与部分类相同的命名空间中。这个新的类将保留你的验证规则,即使你从数据库更新了你的模型。修改你的新类文件内容如下,按照你的规格进行更改等。
[MetadataTypeAttribute(typeof(YourCustomClassForValidation))]
public partial class Person
{
   // No need to put anything here because you already defined these properties
}

public class YourCustomClassForValidation
{
   [DisplayName("Full Name")]
    public string name { get; set; }
}

这为我解决了一个问题,即我没有模型文件可添加注释。有人创建了一个较早的.Net Web应用程序并创建了一个edmx类型系统,我以前从未使用过,只采用了代码优先的方式。因此,我不知道如何向属性添加注释。创建元数据类允许我向属性添加注释。 - Daniel Jackson

0

你需要将EDMX文件和实体分开:

  • EDMX文件可以放在Scaffolding项目中。
  • 实体可以放在Data.Contracts项目中。

更新EDMX模型后,您需要手动将新生成的实体上的更改应用于Data.Contracts项目中的实体。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接