c# - 当使用 OwnsOne()
问题描述
我有几个用于搜索数据库的存储过程。每个返回几个字段与找到/返回的数据量有关。模型如下所示:
// simplified
public abstract class SearchResult {
public int RowCount { get; set; }
public int FilteredRowCount { get; set; }
// other properties
}
public class FooSearch {
public string Id { get; set; }
public string Foo { get; set; }
public SearchResult Result { get; set; }
}
然后在我OwnsOne()
用来链接类的 DBContext 中,按照这个 MS 指南
public DbSet<FooSearch> FooSearch { get; set; }
// OnModelCreating
builder.Entity<FooSearch>().OwnsOne(t => t.Result);
最后我打了 SP 电话:
var searchResult = db.FooSearch.FromSqlRaw("EXECUTE [Search].[Foo] {0}, {1}", foo, bar).ToList();
然而,这最后一步给了我以下错误:
System.InvalidOperationException: 'FromSqlRaw 或 FromSqlInterpolated 是用不可组合的 SQL 调用的,并且有一个查询在它上面编写。考虑
AsEnumerable
在 FromSqlRaw 或 FromSqlInterpolated 方法之后调用以在客户端执行组合。
更改ToList()
为AsEnumerable()
对结果没有影响。
如果我从类中删除OwnsOne()
andResult
属性,FooSearch
那么 SP 工作并且我得到结果。这个问题的原因是什么,我该如何解决?
解决方案
在阅读问题#18232后,我遇到了同样的问题并修复了它。
您需要.IgnoreQueryFilters()
在FromSqlRaw
. 像那样:
var searchResult = db.FooSearch
.FromSqlRaw("EXECUTE [Search].[Foo] {0}, {1}", foo, bar)
.IgnoreQueryFilters()
.ToList();
推荐阅读
- asp.net - 有没有办法将 MSXML 4.0 方法重新路由到 MSXML 6.0 方法?
- linux - OCI 运行时创建失败:$PATH 中找不到可执行文件
- java - 从给定代理访问参数和变量到 Main
- c++ - 每个 depointer/dereference 语法使变量意味着什么?
- python - 在 django 上进行迁移后无法迁移
- html - 为什么 Chrome 和 Firefox 渲染嵌套的 SVG,而内部的 SVG 有不同的转换?
- java - 如果 lambda 表达式中的条件更改 java 中的值
- php - 单击按钮使用 AJAX 更新 PHP 中的数据库。我应该在数据选项卡中输入什么?
- css - 不能覆盖 CSS :root 变量 | --原色:橙色;不回应
- postman - 如何在 Postman 中存储值列表,然后在 API 调用中从列表中传递一个随机值?