我有以下问题
我有一个存储过程,它执行一些复杂的处理,最终需要选择不同的行。
就像这样
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个具有多个联接的表)。在我看来,必须手动维护关联的复杂类型就像维护噩梦一样。
这就是我想要避免的,并使可能的错误尽快被捕获。
谢谢
发布于 2014-05-03 20:07:08
目前,我使用的方法如下:
View1。View1View1添加到模型中(从它创建实体),并将该实体映射到存储过程的结果。以下是代码:
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通过这种方法,我完成了我所需要的:
发布于 2014-04-26 12:24:22
创建一个单独的程序,读取存储过程,然后从它读取值,然后生成您考虑手动编写的源代码。生成代码后,程序应该重新构建项目/解决方案,因此,您只需运行这个新程序来重新生成代码,并在更改存储过程的源代码时生成项目/解决方案。
https://stackoverflow.com/questions/23310351
复制相似问题