我有以下问题
我有一个存储过程,它执行一些复杂的处理,最后需要选择不同的行
像这样的东西
Create Procedure MyProc
@par1 as nvarchar(50)
As
select fld1, fld2 into #tmpTable from Table1
union
select fld1, fld2 from Table2
union
select fld1, fld2 from Table3
-- select result
select distinct fld1, fld2 from #tmpTable
我需要从EF调用此存储过程。我将它添加到ED模型中,但EF没有生成结果复杂类型。
我不想在模型中手动创建复杂类型,因为实际的存储过程很复杂,如果随着时间的推移存储过程可能会改变(通过添加/更改结果列),我将不得不手动编辑复杂类型(我想避免)
上面显示的示例很简单,真正的存储过程从非常复杂的查询(大约6-10个具有多个连接的表)返回更多列。并且必须手动维护相关的复杂类型对我来说就像维护噩梦一样。
这是我想要避免的,并且尽快发现可能的错误。
谢谢
答案 0 :(得分:0)
创建一个单独的程序,它读取存储过程,从中读取值,然后生成您考虑手动编写的源代码。生成代码后,程序应重建项目/解决方案,因此,只需运行此新程序即可在更改存储过程的源代码时重新生成代码并构建项目/解决方案。 / p>
答案 1 :(得分:0)
目前,我正在使用以下方法:
View1
View1
View1
添加到模型(从中创建实体)并将该实体映射到存储过程的结果以下是代码:
Create View View1 as
select cast('' as nvarchar(20)) as fld1, cast(0 as int) as fld2
Create Procedure MyProc
@par1 as nvarchar(50)
As
select fld1, fld2 into #tmpTable from Table1
union
select fld1, fld2 from Table2
union
select fld1, fld2 from Table3
union
select fld1, fld2 from View1
-- select result
select distinct fld1, fld2 from #tmpTable
通过这种方法,我实现了我的需要: