.NET核心entity framework存储过程

我正在尝试将ASP.NET 4.5应用程序移植到.NET Core,我有一个我似乎无法弄清楚的真正问题。

我现有的应用程序执行存储过程,返回带有多个数据表的数据集。 entity framework可以自动将返回的字段映射到我的实体属性,但仅适用于数据集中的第一个数据表(自然)。

所以我只想弄清楚它是否可能以某种方式拦截模型构建过程并使用自定义代码来处理数据集并查看其他数据表来设置实体字段。

我知道我可以使用SqlConnection直接执行存储过程的常规方法,但我想知道entity framework是否有某种方法可以执行此操作。

目前, 执行返回数据的存储过程的方法是使用DbSet.FromSql方法。

 using (var context = new SampleContext()) { var data= context.MyEntity .FromSql("EXEC GetData") .ToList(); } 

这有一定的局限性:

  • 必须在DbSet上调用它
  • 返回的数据必须映射到DbSet类型的所有属性
  • 它不支持ad hoc对象。

或者你可以回归到普通的ADO.NET:

 using (var context = new SampleContext()) using (var command = context.Database.GetDbConnection().CreateCommand()) { command.CommandText = "GetData"; command.CommandType = CommandType.StoredProcedure; context.Database.OpenConnection(); using (var result = command.ExecuteReader()) { // do something with result } } 

有计划在某个阶段引入对 SQL查询返回ad hoc类型的支持 。

要回答@ DKhanaf对多个数据集的问题,可以使用SqlDataAdapter用所有结果集填充DataSet对象。 但是,SqlDataAdapter需要完整的.NET Framework,因此您必须在针对.NET 462或类似的东西时运行.NETCore项目。

  using (var context = new SampleContext()) using (var command = context.Database.GetDbConnection().CreateCommand()) { command.CommandText = "GetData"; command.CommandType = CommandType.StoredProcedure; context.Database.OpenConnection(); using (SqlDataAdapter adapter = new SqlDataAdapter(command)) { var ds = new DataSet(); adapter.Fill(ds); return ds; } } }