C#Entity Framework(.Net Core)驗證(服務器端)如何?

.net asp.net c# entity-framework entity-framework-core

我開始使用.net core(asp.net core)和Entity Framework。

我計劃實現一個webservice(使用asp.net和GraphQL)。現在我想知道有可能使用RegularExpression屬性在Entity Framework中進行驗證。

但它似乎被忽略了。

我發現具有這些屬性的所有樣本都是C#中的客戶端和服務器端。

這不應該在EF(serveide)這樣工作嗎?

是否有一種簡單的方法可以在不寫大量代碼的情況下完成這項工作?

PS:我正在使用PostgreSQL的“Microsoft.EntityFrameworkCore”

如果不符合Book.something的RegularExpression,為什麼跟隨Code不會拋出異常(ps:如果它滿足則它也不會觸發):

    ...
    using Microsoft.EntityFrameworkCore;
    using System.ComponentModel.DataAnnotations;

    namespace aspPlainEF
    {
        public class Startup
        {
            EFCoreDemoContext ef = new EFCoreDemoContext();

            ...

            public class Book
            {
                [Key]
                public int Id { get; set; }

                ...
                [Required]
                [RegularExpression(@"^hello$", ErrorMessage = "You can not have that")]
                public string something { get; set; }

            }

            public class EFCoreDemoContext : DbContext
            {
                public DbSet<Book> Books { get; set; }

                protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
                    optionsBuilder.UseNpgsql(...);
                }
            }

            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                ...

                app.Run(async (context) =>
                {
                    Book book = new Book();
                    ...
                    book.something = "xxx";
                    ef.Add(book); ef.SaveChanges();
                    await context.Response.WriteAsync("hell1");
                });
            }
        }
    }

熱門答案

有關詳細信息,請參閱我在EF Core帖子中的驗證

這是它的要點:

public override int SaveChanges()
{
    var entities = from e in ChangeTracker.Entries()
                   where e.State == EntityState.Added
                       || e.State == EntityState.Modified
                   select e.Entity;
    foreach (var entity in entities)
    {
        var validationContext = new ValidationContext(entity);
        Validator.ValidateObject(
            entity,
            validationContext,
            validateAllProperties: true);
    }

    return base.SaveChanges();
}


Related

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