我正在使用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?
答案 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
的强大功能。您还可以同时使用DataAnnotation
和Fluent API
。但是Code-First优先于Fluent API > data annotations > default conventions
。