我正在尝试将 ASP.NET 4.5 应用程序移植到 .NET Core,但有一个我似乎无法解决的实际问题。
我现有的应用程序执行存储过程,该存储过程返回具有多个数据表的数据集。实体框架可以自动将返回的字段映射到我的实体属性,但仅适用于数据集中的第一个数据表(自然)。
因此,我只是想弄清楚是否有可能以某种方式拦截模型构建过程并使用自定义代码来处理数据集并查看其他数据表以设置实体字段。
我知道我可以使用直接使用执行存储过程的正常方式SqlConnection
但我想知道实体框架是否已经有某种方法可以做到这一点。
眼下,执行存储过程的方式 http://www.learnentityframeworkcore.com/raw-sql返回数据是使用DbSet.FromSql
方法。
using (var context = new SampleContext())
{
var data= context.MyEntity
.FromSql("EXEC GetData")
.ToList();
}
这有一定的局限性:
- 必须调用它
DbSet
- 返回的数据必须映射到
DbSet
type
- 它不支持临时对象。
或者您可以退回到普通的 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
}
}
有计划引入对返回临时类型的支持 https://github.com/aspnet/EntityFramework/issues/1862来自某个阶段的 SQL 查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)