如何使用Database First方法在EF Core中添加數據驗證?

c# ef-database-first entity-framework entity-framework-core validation

我正在使用ASP.NET Core(RC2)和ORM實體框架核心實現MVC-Web應用程序。由於我已經有了數據庫設計,我必須通過Scaffold-DBContext命令創建實體模型。

這很好用。現在,我想為生成的實體添加一些註釋,以便添加驗證。例如MaximumLength:

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

如果有一些數據庫更改,我必須再次使用scaffold命令。但這會導致一些額外的註釋丟失。如何在不丟失實體模型的情況下更新實體模型?根據asp.net頁面或從這個主題 ,似乎有可能與EF6。有沒有類似的方法來實現EF7 / Core?

熱門答案

是的,你可以 。你必須使用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核心文件

OP的反饋

但是也將生成數據庫上下文類。這意味著,如果我再次使用該命令,它將替換舊的數據庫上下文。

我的建議 :

你可以在這裡使用partial class.keep你的自定義實現。當你重新生成代碼時,這些自定義代碼不會被覆蓋。

OP的反饋意見:

我可以用部分類來解決它但在生成實體之後,你必須遍歷所有實體並刪除所有重複的屬性。仍然不是我想要的,因為你仍然需要修改實體。

我的建議 :

您不需要刪除任何重複的映射。 B'cos EF優先於Fluent API無論代碼重生自動完成了什麼映射都無關緊要。您可以使用Fluent API覆蓋那些。這是Fluent API的強大Fluent API 。您還可以同時使用DataAnnotationFluent API 。但是Code-First優先考慮Fluent API > data annotations > default conventions



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow