Невозможно проверить сущность, используя Entity Framework Core (ядро.net)

Я использую EntityFramework Core для подключения к базе данных в.Net Core Web API. Я столкнулся с проблемой при попытке проверить сущность перед отправкой изменений в БД, т.е. Context.SaveChanges(). Ошибка проверки не выдается, даже если объект не соответствует определенному условию. Если я добавляю условие с использованием атрибута, оно работает, но оно не работает, когда условия добавляются с помощью построения модели.

Есть ли способ правильно проверить сущность, созданную с помощью построителя моделей?

Сущность:

public class AppSession
{
    public AppSession()
    {

    }

    public long AppSessionId { get; set; }
    public Guid ExternalAppSessionId { get; set; }
    public DateTime CreatedDate { get; set; }
    public Sources SourceId { get; set; }
    public string Gcid { get; set; }
    //[StringLength(60)]
    public string UserAgent { get; set; }
    public string SessionReferrer { get; set; }      

}

Модельер:

public class AppSessionConfig : IEntityTypeConfiguration<AppSession>
    {
        public void Configure(EntityTypeBuilder<AppSession> builder)
        {
            builder.Property(e => e.AppSessionId).HasColumnName("AppSessionID");

            builder.Property(e => e.ExternalAppSessionId).HasColumnName("ExternalAppSessionID");

            builder.Property(e => e.Gcid)
                 .HasColumnName("GCID")
                 .HasMaxLength(200)
                 .IsUnicode(false);


            builder.Property(e => e.Keyword)
                 .HasMaxLength(255)
                 .IsUnicode(false);

            builder.Property(e => e.SessionReferrer)
                 .HasMaxLength(512)
                 .IsUnicode(false);

            builder.Property(e => e.SourceId).HasColumnName("SourceID");

            builder.Property(e => e.UserAgent)
                 .HasMaxLength(50)
                 .IsUnicode(false);

        }

Контекст:

public partial class TestDbContext : DbContext,IDbContext
{
    public TestDbContext(DbContextOptions<TestDbContext> options)
   : base(options)
    { }

    public virtual DbSet<Entities.AppSession> AppSessions { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.ApplyConfiguration(new AppSessionConfig());
   }

    public override int SaveChanges()
    {
        ValidateEntities();
        return base.SaveChanges();
    }

private void ValidateEntities()
    {
        var entities = (from entry in ChangeTracker.Entries()
                        where entry.State == EntityState.Modified || entry.State == EntityState.Added
                        select entry.Entity);

        var validationResults = new List<ValidationResult>();
        foreach (var entity in entities)
        {
            var validationContext = new ValidationContext(entity);
            Validator.ValidateObject(entity, validationContext, true);
        }
    }

}

Спасибо,

1 ответ

EF Core больше не проверяет.

Здесь есть сообщение с той же проблемой: Entity Framework Core не проверяет данные при сохранении?

Не совсем уверен, что это то, что вы хотите, но есть некоторая информация здесь по проверке объекта (на стороне клиента) перед сохранением в базе данных...

Другие вопросы по тегам