如何使用Database First方法在EF Core中添加数据验证?

时间:2016-09-06 17:24:26

标签: c# entity-framework validation entity-framework-core ef-database-first

我正在使用ASP.NET Core(RC2)和ORM Entity Framework Core实现MVC-Web应用程序。由于我已经有了数据库设计,我必须通过Scaffold-DBContext命令创建实体模型。

这很好用。现在,我想为生成的实体添加一些注释以添加验证。例如MaximumLength:

public class Blog
{
    public int BlogId { get; set; }
    [MaxLength(500)]
    public string Url { get; set; }
}

如果有一些数据库更改,我必须再次使用scaffold命令。但这会导致一些额外的注释丢失。如何在不丢失实体模型的情况下更新实体模型?根据{{​​3}}页面或此asp.net,似乎可以使用EF6。有没有类似的方法来实现EF7 / Core?

1 个答案:

答案 0 :(得分:1)

是的,您可以。您必须使用Fluent API代替Data Annotations

以下是使用Fluent API

的示例
public  partial class MyContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Blog>()
                .Property(b => b.Url)
                .HasMaxLength(500);
        }
    }

参考: EF core Doc

OP的反馈

  

但是也将生成数据库上下文类。这意味着,如果   我再次使用该命令,它将替换旧的数据库上下文。

我的建议:

您可以在此使用partial类。在该文件上保留自定义实现。重新生成代码时,这些自定义代码不会被覆盖。

OP的反馈:

  

我可以用生成的部分类来解决它   实体,您必须遍历所有实体并删除所有实体   重复的属性。仍然不是我想要的,   因为你仍然需要修改实体。

我的建议:

您无需删除任何重复的映射。 B'cos EF优先于Fluent API。无论代码重生自动完成了什么,都无关紧要。您可以使用Fluent API覆盖这些内容。这是Fluent API的强大功能。您还可以同时使用DataAnnotationFluent API。但是Code-First优先于Fluent API > data annotations > default conventions