Я пытаюсь изменить способ, которым asp.net генерирует свои таблицы идентификаторов, пытаясь основывать генерацию на идентификаторе int вместо Guid (строка), а также добавляя другую схему (вместо dbo -> Security) и QueryFilter для все мои объекты, в этом случае я создал для каждого класса сопоставление, но проиллюстрирую идею только одним, который дает мне ошибку.
public class AspNetRole : IdentityRole<int>, IEntityBase
{
public bool IsDeleted { get; set; }
public string CreatedBy { get; set; }
public string UpdatedBy { get; set; }
public DateTime? CreatedOn { get; set; }
public DateTime? UpdatedOn { get; set; }
}
public interface IEntityBase
{
int Id { get; set; }
bool IsDeleted { get; set; }
string CreatedBy { get; set; }
string UpdatedBy { get; set; }
DateTime? CreatedOn { get; set; }
DateTime? UpdatedOn { get; set; }
}
Класс сопоставления с QueryFilter:
public class AspNetRoleMap : IEntityTypeConfiguration<AspNetRole>
{
public void Configure(EntityTypeBuilder<AspNetRole> builder)
{
builder.ToTable(name: "AspNetRole", schema: "Security");
builder.HasQueryFilter(app => !app.IsDeleted);
}
}
Дбконтекст:
public class AspNetSecurityDbContext : IdentityDbContext<AspNetUser, IdentityRole<int>, int>
{
public AspNetSecurityDbContext(DbContextOptions<AspNetSecurityDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ApplyConfiguration(new AspNetRoleMap());
}
}
После запуска миграции я получаю следующую ошибку:
Выражение фильтра «приложение => Not(app.IsDeleted)» не может быть указано для типа сущности «AspNetRole». Фильтр может применяться только к корневому типу объекта в иерархии.
Я попробовал этот подход http://github%20ef, но по-прежнему получаю больше ошибок.
builder.HasQueryFilter(app => !((IEntityBase)app).IsDeleted);