asp.net EF+MVC2实战3
短信预约 -IT技能 免费直播动态提醒
如果一个存储过程获得的是两张表的联合查询结果,那么我们用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
@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>筛选
public class EqualLity : IEqualityComparer<SS_CODE>
{
public bool Equals(SS_CODE ssCode1, SS_CODE ssCode2)
{
return ssCode1.C_ENAME.Equals(ssCode2.C_ENAME) && ssCode1.C_CNAME.Equals(ssCode2.C_CNAME);
}
public int GetHashCode(SS_CODE ssCode)
{
return ssCode.C_CNAME.GetHashCode();
}
}
{
public bool Equals(SS_CODE ssCode1, SS_CODE ssCode2)
{
return ssCode1.C_ENAME.Equals(ssCode2.C_ENAME) && ssCode1.C_CNAME.Equals(ssCode2.C_CNAME);
}
public int GetHashCode(SS_CODE ssCode)
{
return ssCode.C_CNAME.GetHashCode();
}
}
codeEntities.SS_CODE.AsEnumerable().Distinct(new EqualLity()).ToList();通过这样就可以获取到C_CNAME和C_ENAME不重复的SS_CODE对象
http://www.cnblogs.com/foundation/archive/2008/10/06/1304706.html
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341