我有一个具有 JObject 类型属性的实体,并且我需要能够针对这些属性使用 DbFunctions。
当我执行时,项目抛出一个异常,指出 DbFunction 不允许使用 JObject 类型的参数。
该实体就像...
public class OrchestrationRun
{
public long Id { get; set; }
public JObject MetaData { get; set; }
public JObject SystemMetaData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
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("");
}
// …Run Code Online (Sandbox Code Playgroud) 我使用breeze谓词实现过滤器.使用BreezeJs和ASP.NET WebAPI(Breeze Server Side)和Entity Framework
谓词看起来像这样:
var predicate = breezeProvider.breeze.Predicate.create('serialNumber', '==', $scope.filter.serialNumber);
predicates.push(predicate);Run Code Online (Sandbox Code Playgroud)
当我执行查询.Breeze使用以下消息抛出异常:
检测到具有不兼容类型的二元运算符.找到操作数类型edm.string和edm.guid用于种类相等
$ scope.filter.serialNumber是一个字符串,serialNumber是一个GUID属性
网址如下.
http:// localhost:51969/breeze/WarehouseProductTransactions/GetProducts?$ filter =(StatusId ne 3d)和(WarehouseId eq 1d)和(AuthorizedADUserId eq'bTdbnW8t6Uu4D4KHCoQOhg ==')和(SerialNumber eq guid'1b9d065e-eb48-4f3d- 883C-2c841771a3e8' )&$的OrderBy =编号&$顶部= 5&$扩大=库存,AuthorizedADUser&$ inlinecount =所有页&)
请注意代码段:
(SerialNumber eq guid'1b9d065e-eb48-4f3d-883c-2c841771a3e8')
我的服务器端如下:
[EnableBreezeQuery(MaxNodeCount = 200)]
public IQueryable<WarehouseProductTransactionDetail> GetProducts()
{
return _contextProvider.Context.WarehouseProductTransactionDetails;
}
Run Code Online (Sandbox Code Playgroud)
我试图找出如何解决这种情况,但不知道.
任何帮助表示赞赏