调整实体框架中的类生成以使用存储过程

本文关键字:存储过程 实体 框架 调整 | 更新日期: 2023-09-27 18:34:41

我正在寻找一些有关如何调整EntityModel.tt和可能EntityModel.Context.tt中实体类的 T4 代码生成的指导(我正在使用 POCO 类(以强制对实体的任何查询使用存储过程(我已经有了生成所有存储过程 EntitySQL.tt(

例如,类似

context.MyEntities().Single(c => c.id == 5)

不会生成 SQL,但会调用 SP "sp_GetMyEntities">

如果您有更好的策略来达到相同的结果,我将很高兴了解它。

更新在这一点上,我只对CRUD的READ部分感兴趣。并且没有连接。理论上,可以将 SP 设置为接受加载项的 ID 作为参数,以避免加载整个表(在这种情况下,.Single(c => c.id == 5)部分需要 bn,并将 ID 提供给MyEntities对象。

这是针对"数据库优先"实现的

调整实体框架中的类生成以使用存储过程

代码优先不支持映射到存储过程。模型优先和数据库优先流确实支持映射到存储过程,但它不能按照您希望的方式工作,因为存储过程不可组合(即,如果您这样做.Single(( 过滤充其量只会发生在不在数据库中的客户端上 - 出于性能原因,您希望在数据库站点上进行过滤,因为您可能不想将整个数据库带到客户端只是为了选择一个实体(。随 .NET Framework 4.5 一起提供的实体框架 5 的核心库支持 TVF,这些 TVF 是可组合的,应该使你所追求的成为可能,但同样不是在代码优先方案中。