我开始在实体框架中使用.net核心(asp.net核心)。C#实体框架(.Net Core)验证(服务器端)如何?
我打算实施一个web服务(使用asp.net和GraphQL)。 现在我不知道是否有可能在实体框架中使用RegularExpression属性进行验证。
但它似乎被忽略。
我发现这些属性的所有示例都是C#中的客户端和服务器端。
这是不应该在EF(伺服器)这样的工作?
有没有简单的方法来使这项工作,而不写大量的代码?
PS:使用“Microsoft.EntityFrameworkCore”在PostgreSQL
IM为什么下面的代码不抛出一个异常如果Book.something的正则表达式不符合(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实体验证。你可以通过反射编写自己的验证器,创建自己的属性,在类中搜索该属性的类并进行验证(这是一个非常粗略的描述,但我认为这个想法很明确)。 – Gusman
@Gusman我似乎记得至少在以前的版本中,EF会自动验证应用了验证属性的实体吗? https://msdn.microsoft.com/en-us/library/gg193959.aspx尽管如此,它可能还没有成为核心。 –
@AlexPaven嗯,看起来你是对的,我对EF非常生疏,我需要回收自己......(这就是为什么我没有把它作为答案加入:/)。 – Gusman