C# 在导航属性的Ef Core中使用父项而不是实体类型
我想将基础结构层中实体类型的父级用于导航属性,并在全局查询筛选器中访问它,但我得到了 无法为实体类型C# 在导航属性的Ef Core中使用父项而不是实体类型,c#,entity-framework-core,C#,Entity Framework Core,我想将基础结构层中实体类型的父级用于导航属性,并在全局查询筛选器中访问它,但我得到了 无法为实体类型AppointmentModel指定筛选器表达式x=>Convert(x.Status,StatusModel).IsActive。筛选器只能应用于层次结构中的根实体类型 我解决不了 我的代码是: protected override void OnModelCreating(ModelBuilder modelBuilder) { var entities = modelBuilder.
AppointmentModel
指定筛选器表达式x=>Convert(x.Status,StatusModel).IsActive
。筛选器只能应用于层次结构中的根实体类型
我解决不了
我的代码是:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var entities = modelBuilder.Model.GetEntityTypes();
foreach (var entity in entities)
{
if (entity.BaseType?.ClrType == typeof(ModelBase) || entity.BaseType?.ClrType == typeof(EntityBase<Guid>)&&entity.ClrType!=typeof(StatusModel))
{
modelBuilder.Entity<StatusModel>().HasMany(entity.GetType()).WithOne(nameof(ModelBase.Status))
.HasForeignKey(nameof(ModelBase.StatusId)).IsRequired().OnDelete(DeleteBehavior.Restrict);
MethodInfo method = GetType().GetMethod(nameof(ConvertExp)).MakeGenericMethod(entity.ClrType);
modelBuilder.Entity(entity.ClrType).HasQueryFilter((LambdaExpression) method.Invoke(this, new object[] { }));
}
}
}
但它不能过滤状态模型 这只是一个已知的全局查询筛选器限制,如异常状态所示。
public Expression<Func<TEntity, bool>> ConvertExp<TEntity>() where TEntity : ModelBase
{
return (x => ((StatusModel)x.Status).IsActive);
}
public abstract class ModelBase {
public Guid? StatusId { get; set; }
public EntityBase<Guid> Status { get; set; }
}