У меня есть несколько хранимых процедур, которые я использую для поиска в базе данных. Каждое возвращает несколько полей, связанных с количеством найденных / возвращенных данных. Модели выглядят так:
// 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; }
}
Затем в DBContext я использую OwnsOne()
для связывания классов, согласно этому руководству по 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 был вызван с не- composable SQL и с составлением запроса по нему. Рассмотрите возможность вызова AsEnumerable
после метода FromSqlRaw или FromSqlInterpolated для выполнения композиции на стороне клиента. '
Изменение ToList()
на AsEnumerable()
не влияет на результат.
Если я удаляю свойства OwnsOne()
и Result
из класса FooSearch
, тогда SP работает, и я получаю результаты. В чем причина этой проблемы и как я могу ее исправить?