Exemple #1
0
        private void ConfigureBaseEntity(EntityTypeBuilder <TEntity> Builder, BaseEntityTypeConfigurationOption option)
        {
            var dbSetProperties = typeof(WebAppContext).GetProperties().Where(p => p.PropertyType.Name.StartsWith(nameof(DbSet <TEntity>)));

            if (!dbSetProperties.Any(p => p.PropertyType == typeof(DbSet <TEntity>)))
            {
                throw new Exception($"Missing {typeof(TEntity).FullName} with DbSet in Context");
            }

            var entityProperties = typeof(TEntity).GetProperties().Where(p => p.PropertyType is ICollection || typeof(BaseEntity).IsAssignableFrom(p.PropertyType));
            var missingDbSets    = entityProperties.Select(p => p.PropertyType).Except(dbSetProperties.Select(p => p.PropertyType.GenericTypeArguments[0]));

            if (missingDbSets.Any())
            {
                throw new Exception($"{string.Join(",", missingDbSets.Select(p => p.Name))} used as a navigation but Missing DbSet in Context");
            }

            Builder
            .HasKey(e => e.Id);

            if (!string.IsNullOrEmpty(option.DefaultSqlValue.NewSequentialIdSql))
            {
                Builder
                .Property(e => e.Id)
                .ValueGeneratedOnAdd()
                .HasDefaultValueSql(option.DefaultSqlValue.NewSequentialIdSql);
            }

            Builder
            .Property(e => e.CreatedDate)
            .ValueGeneratedOnAdd()
            .HasDefaultValueSql(option.DefaultSqlValue.GetUtcDate);

            Builder
            .Property(e => e.RecordStatus)
            .HasDefaultValue(RecordStatus.Active);

            Builder
            .HasQueryFilter(e => e.RecordStatus == RecordStatus.Active);

            Builder
            .Property(e => e.RowVersion)
            .IsRowVersion();
        }
Exemple #2
0
 public BaseEntityTypeConfiguration(EntityTypeBuilder <TEntity> builder, BaseEntityTypeConfigurationOption option)
 {
     ConfigureBaseEntity(builder, option);
 }
Exemple #3
0
 public CustomerTypeConfiguration(EntityTypeBuilder <Customer> builder, BaseEntityTypeConfigurationOption option) : base(builder, option)
 {
 }