In EF 6, I use this code that calls a stored procedure and returns result as a custom model.
var pShippingMethodId = _dataProvider.GetParameter();
pX.ParameterName = "X";
pX.Value = x;
pX.DbType = DbType.Int32;
var pStoreId = _dataProvider.GetParameter();
pY.ParameterName = "Y";
pY.Value = y;
pY.DbType = DbType.Int32;
var pLanguageId = _dataProvider.GetParameter();
pZ.ParameterName = "Z";
pZ.Value = z;
pZ.DbType = DbType.Int32;
var parameters = " @" + pX.ParameterName + ", @" + pY.ParameterName + ", @" + pZ.ParameterName;
// invoke stored procedure
var result = _dbContext.SqlQuery<AvailableDeliveryDateTimeModel>(Constants.LoadAvailableDeliveryDateTimesStoredProcedureName + parameters,pX, pY, pZ).ToList();
I want migrate this code to EF Core, but I can't find appropriate methods in EF Core
You can utilize the Query Types introduced in EF Core 2.1.
First you need to register you class as query type:
modelBuilder.Query<ClaimDataView>();
Then you can use Context.Query<ClaimDataView>()
in place of your current Context.Claims
:
var query = Context.Query<ClaimDataView>().FromSql(...);
Update (EF Core 3.x+):
Starting with EF Core 3.0, query types have been consolidated with entity types and renamed to Keyless Entity Types, so the corresponding code is
modelBuilder.Entity<ClaimDataView>().HasNoKey().ToView(null);
and
var query = Context.Set<ClaimDataView>().FromSql(...);
If you are not on version 2.1, you will need to add:
public DbSet<ClaimDataView> ClaimDataView { get; set; }
to your moduleContext. And add NotMapped to your class:
[NotMapped]
public class ClaimDataView