.net core EF Core:按复杂属性筛选查询(使用自定义值转换器)
伙计们 我现在使用EF Core 3.1作为我的数据库提供程序。因此,让我们设想一个具有不同工作角色的简单用户模型(例如,“工作者”、“构建者”、“受支持者”等) 因为EF核心无法将自定义ValueConverter转换为SQL并在服务器端执行。现在3.1.x中仍然没有警告,但是这段代码将在5.x.NET中捕获一个错误 那么,正确编写这个过滤器查询的好方法是什么?我不想抓住整个用户并在客户端对其进行过滤,这可能会导致性能更差 多谢各位.net core EF Core:按复杂属性筛选查询(使用自定义值转换器),.net-core,ef-core-3.1,.net Core,Ef Core 3.1,伙计们 我现在使用EF Core 3.1作为我的数据库提供程序。因此,让我们设想一个具有不同工作角色的简单用户模型(例如,“工作者”、“构建者”、“受支持者”等) 因为EF核心无法将自定义ValueConverter转换为SQL并在服务器端执行。现在3.1.x中仍然没有警告,但是这段代码将在5.x.NET中捕获一个错误 那么,正确编写这个过滤器查询的好方法是什么?我不想抓住整个用户并在客户端对其进行过滤,这可能会导致性能更差 多谢各位 public enum Roles { Worker
public enum Roles
{
Worker = 1,
Builder = 2,
Supporter = 3
}
public class User
{
public Guid Id { get; set; }
public ICollection<Roles> EmploymentRoles { get; set; }
...
}
...
DbSet<User> Users { get; set; }
...
modelBuilder.Entity<User>().Property(f => f.EmploymentRoles).HasConversion(new JsonEnumCollectionToStringConverter<Roles>());
public class JsonEnumCollectionToStringConverter<T> : ValueConverter<ICollection<T>, string> where T : Enum
{
public JsonEnumCollectionToStringConverter() :base(entity => JsonConvert.SerializeObject(entity), value => JsonConvert.DeserializeObject<ICollection<T>>(value))
{
}
}
var users = dbContext.Users.Where(e => e.EmploymentRoles.Contains(Roles.Worker)).ToList();