[英]Result type for stored procedures that cannot be mapped to Complex type on EF
我有以下问题
我有一个存储过程,该过程执行一些复杂的处理,最后需要选择不同的行
像这样
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个具有多个联接的表)中返回更多的列。 在我看来,必须手动维护关联的复杂类型就像一场维护噩梦。
我要避免这种情况,并尽快发现可能的错误。
谢谢
创建一个单独的程序,该程序读取存储过程,从存储过程中读取值,然后生成您正考虑手动编写的源代码。 生成代码后,程序应重新构建项目/解决方案,因此,当您更改存储过程的源代码时,只需运行此新程序即可重新生成代码并构建项目/解决方案。
当前,我正在使用以下方法:
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
通过这种方法,我完成了我需要的工作:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.