.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; } } }
- 修改ASP.NET Core中的静态文件响应
- 在visual studio 2015下以x86启动asp.net核心项目
- ASP.NET Core通过web.config授权AD组
- 如何在asp.net核心中获取项目的根目录。 Directory.GetCurrentDirectory()似乎无法在mac上正常工作
- 用于Windows x64的ASP.NET核心应用程序(.NET Framework)仅在project.assets.json中出错
- 升级到ASP.NET Core 2.0后,无法从singleton IActiveUsersService使用作用域服务IMongoDbContext
- 如何将服务配置传递给Xunit项目测试控制器?
- 当结果在IActionResult类型中返回时,如何在Xunit中获取内容值
- ASP.NET Core Identity在应用程序启动时添加自定义用户角色