我的原帖 - https://stackoverflow.com/a/57224037/1979465
要调用存储过程并将结果放入 EF Core 中的模型列表中,我们必须遵循 3 个步骤。
第 1 步。
您需要添加一个新类,就像您的实体类一样。哪个应该具有您的 SP 中所有列的属性。例如,如果您的 SP 返回两个名为 Id 和 Name 的列,那么您的新类应该类似于
public class MySPModel
{
public int Id {get; set;}
public string Name {get; set;}
}
第 2 步。
然后你必须在你的 SP 的 DBContext 类中添加一个 DbQuery 属性。
public partial class Sonar_Health_AppointmentsContext : DbContext
{
public virtual DbSet<Booking> Booking { get; set; } // your existing DbSets
...
public virtual DbQuery<MySPModel> MySP { get; set; } // your new DbQuery
...
}
第 3 步。
现在您将能够从您的 DBContext 调用您的 SP 并获取结果。
var result = await _context.Query<MySPModel>().AsNoTracking().FromSql(string.Format("EXEC {0} {1}", functionName, parameter)).ToListAsync();
我使用的是通用 UnitOfWork & Repository。所以我执行 SP 的功能是
/// <summary>
/// Execute function. Be extra care when using this function as there is a risk for SQL injection
/// </summary>
public async Task<IEnumerable<T>> ExecuteFuntion<T>(string functionName, string parameter) where T : class
{
return await _context.Query<T>().AsNoTracking().FromSql(string.Format("EXEC {0} {1}", functionName, parameter)).ToListAsync();
}
希望对某人有所帮助!!!