Невозможно проверить сущность, используя 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 не проверяет данные при сохранении?
Не совсем уверен, что это то, что вы хотите, но есть некоторая информация здесь по проверке объекта (на стороне клиента) перед сохранением в базе данных...