Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 使用数据库第一个模型(EF 5)向模型添加验证_Entity Framework_Validation_Annotations_Database First - Fatal编程技术网

Entity framework 使用数据库第一个模型(EF 5)向模型添加验证

Entity framework 使用数据库第一个模型(EF 5)向模型添加验证,entity-framework,validation,annotations,database-first,Entity Framework,Validation,Annotations,Database First,我知道如何将验证错误添加到模型状态。我知道如何将验证注释添加到模型类中。问题是,对于数据库优先,我不想接触生成的代码,因为当我重新生成时,我将丢失我的定制。我总是尝试在部分中进行自定义,但不能在部分中向现有属性添加注释 这里的最佳做法是什么?您需要将EDMX文件和实体分开: EDMX文件可以放置在脚手架项目中 实体可以放置在Data.Contracts项目中 更新EDMX模型后,您需要在Data.Contracts项目的实体上手动应用新生成实体的更改。您需要利用MetadataTypeAtt

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


这里的最佳做法是什么?

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

  • EDMX文件可以放置在脚手架项目中
  • 实体可以放置在Data.Contracts项目中

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

您需要利用
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; }
}

我应该补充一点,我目前所做的是创建一个ViewModel,但这感觉有点多余,特别是因为我已经在Knockout JS中创建了一个veiw模型。这解决了我没有模型文件添加注释的问题。有人创建了一个旧的.Net Web应用程序,并创建了一个edmx类型的系统,我以前从未使用过,只是先编写代码。所以我不知道如何在属性中添加注释。创建元数据类允许我向属性添加注释。