asp.net EF+MVC2实战3

如果一个存储过程获得的是两张表的联合查询结果,那么我们用EF该如何映射存储过程呢?很简单,再建一个视图。存储过程如下
ALTER     PROCEDURE    [dbo].[getFuncsByUserAuth]    
@strUserId VARCHAR(32)    
AS BEGIN    
         SELECT DISTINCT a.C_MODUL_ID,b.C_FUNCTP_ID,b.C_FUNCTP_NAME,b.C_FUNCTP    
         FROM SS_FUNC a,SS_FUNCTP b
         WHERE a.C_FUNC_ID IN
            ( SELECT distinct C_FUNC_ID
             FROM SS_USERAUTH
             WHERE C_USER_ID = @strUserId    
            )
         AND b.C_FUNCTP_ID = a.C_FUNC_ID
ORDER BY C_MODUL_ID

END
 
返回的是两张表的结果。
那么我们在映射存储过程的时候不能指定为具体的某一个实体。而是要指定为一个视图的实体。看下面
这是建的视图,然后我们再看看如何映射存储过程。在edmx设计界面上右键UpDate Model  form Database,选择存储过程,然后再右键
点击model Browser。弹出以下界面
在Function Import 上右键
选择第一项,弹出下面的界面
通过这样的设置就可以把两张表的查询结果通过V_Funcs实体得到。
控制器调用很简单(实体.GetFuncsByUserAuth(用户Id))
最后呢,把我最近项目上遇到的一些问题给大家卡看
首先是List<Object>筛选
InBlock.gif public class EqualLity : IEqualityComparer<SS_CODE>
InBlock.gif                {
InBlock.gif                         public bool Equals(SS_CODE ssCode1, SS_CODE ssCode2)
InBlock.gif                        {
InBlock.gif                                 return ssCode1.C_ENAME.Equals(ssCode2.C_ENAME) && ssCode1.C_CNAME.Equals(ssCode2.C_CNAME);
InBlock.gif                        }
InBlock.gif
InBlock.gif                         public int GetHashCode(SS_CODE ssCode)
InBlock.gif                        {
InBlock.gif                                 return ssCode.C_CNAME.GetHashCode();
InBlock.gif                        }
InBlock.gif                }
codeEntities.SS_CODE.AsEnumerable().Distinct(new EqualLity()).ToList();通过这样就可以获取到C_CNAME和C_ENAME不重复的SS_CODE对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值