EntityFramework 执行SQL语句进行参数化查询代码示例

来源:互联网 发布:三菱fx2n pid编程手册 编辑:程序博客网 时间:2024/05/29 15:07

       在我们用EntityFramework时,一般情况下我们是要将数据库表或对象添加到edmx文件中,以建立数据映射模型;从而进行后续的增删查改。但有时在做老系统维护或改造时,会发现老系统代码中有很长的拼装SQL语句,好多这个连接那个连接非常复杂(能有上千行之多啊,如在现在我们可能就用存储过程处理了,但碍于风格统一,客户限制等),这时去理清里面的关系,再将需用到的表添加大edmx中,再按照连接关系去用linq形式查询有时觉得真的好费时间。

        其实呢,EntityFramework也是支持sql语句查询的,而且支持的也非常棒;就跟利用ADO.Net一样,写个sql语句,参数预定义好,传进去后执行就可得到返回的结果。更值得注意的一点是,还不需要将数据表拉进edmx文件中,把要移植的sql语句直接搬过去,参数传进去就可以了,也可谓省时省力;当然我们要根据实际需要自定义一下结果实体类。现把示例代码贴出来,时间考虑,直接贴的项目中的代码,需要的参照修改即可,不要纠结。

 

代码使用实现:

using (MySQLEntities opxEnity = new MySQLEntities()){    var sqlText = "SELECT cpm.ManagerID, usr.Email FROM componentmanagers cpm INNER JOIN users usr ON usr.UserID = cpm.ManagerID INNER JOIN components cmp ON cmp.ComponentID = cpm.ComponentID WHERE usr.Deleted = 0 AND cmp.Deleted = 0 AND cmp.Closed = 0 AND cmp.IsMicros = @IsMicros ORDER BY ManagerID";    var args = new DbParameter[] {        new MySqlParameter {ParameterName = "IsMicros", Value = 1}    };    var opsManagers = opxEnity.Database.SqlQuery<OpsManagersModel>(sqlText, args).Distinct(new FastPropertyComparer<OpsManagersModel>("ManagerID")).ToList();    //to do ...}

 

结果实体类:

class OpsManagersModel{     public string ManagerID { get; set; }     public string Email { get; set; } }


 可能有些人不认同此做法,这就要根据项目的实际情况做出选择了。

-----------------------------------------------------------------------------------------------------------------------------------------------------

感谢阅读,希能对你有益。

2015年10月9日

Kevin.Chen     蘇州.娄城

O(∩_∩)O~


 

1 0
原创粉丝点击