У меня есть сущность со свойствами типа JObject, и мне нужно иметь возможность использовать DbFunctions для этих свойств.
Когда я выполняюсь, проект выдает исключение, говорящее, что DbFunction не допускает параметры типа JObject.
Объект похож на ...
public class OrchestrationRun
{
public long Id { get; set; }
public JObject MetaData { get; set; }
public JObject SystemMetaData { get; set; }
}
DbContext выглядит как ...
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions options)
: base(options)
{
}
public virtual DbSet<OrchestrationRun> OrchestrationRun { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new OrchestrationRunConfiguration());
// DbFunction mapping for JSON_VALUE
modelBuilder.HasDbFunction( typeof(MyDbContext).GetMethod(nameof(JsonValue)))
.HasName("JSON_VALUE")
.HasSchema("");
}
// DbFunction
public static string JsonValue(JObject column, [NotParameterized] string path) => throw new NotSupportedException();
}
OrchestrationRunConfiguration - это ...
public class OrchestrationRunConfiguration : IEntityTypeConfiguration<OrchestrationRun>
{
public void Configure(EntityTypeBuilder<OrchestrationRun> builder)
{
builder.Property(e => e.MetaData).HasConversion(
jObject => jObject != null ? jObject.ToString(Formatting.None) : null,
json => string.IsNullOrWhiteSpace(json) ? null : JObject.Parse(json)
);
builder.Property(e => e.SystemMetaData).HasConversion(
jObject => jObject != null ? jObject.ToString(Formatting.None): null,
json => string.IsNullOrWhiteSpace(json) ? null : JObject.Parse(json)
);
}
}
Запрос, который я пытаюсь выполнить: ...
var dbResponse = (from or in this.dbContext.OrchestrationRun
where MyDbContext.JsonValue(or.MetaData,"$.Product.ProductCategoryName") == "EXAMPLE"
select new
{
Id = or.Id,
CategoryId = "EXAMPLE"
}
).ToList();
Примечание: Исключение возникает при создании экземпляра DbContext.Поэтому запрос никогда не вызывается.
Выдается исключение ...
System.InvalidOperationException: параметр 'column' для функции DbFunction 'MyDbContext.JsonValue' имеетнедопустимый тип 'JObject'.Убедитесь, что тип параметра может отображаться текущим поставщиком.в Microsoft.EntityFrameworkCore.Infrastructure.RelationalModelValidator.ValidateDbFunctions (модель IModel) в Microsoft.EntityFrameworkCore.Internal.SqlServerModelValidator.Validate (модель IModel * * * *).1033 *