zoukankan      html  css  js  c++  java
  • wcf+linq to sql中关联查询返回数据问题

    前段时间准备采用wcf+nh框架开发sl程序,发现采用nh开发不适合我的中型、并且快速开发项目,所以综合考量了下,决定采用wcf+linq to sql 。

    但是此模式也有缺点,也是linq to sql的缺点,查询语句写起来比较复杂(),只有边摸索,边开发了。

    所以第一步就是搭建wcf:,目前我采用的wcf寄宿在一个winform程序,并采用tcp协议(考虑效率问题)。

    第二步:在wcf服务项目中添加linq to sql 类。

    在实现wcf 时,我有个user表和rose表,两个表是关联表,usr表中外键是roseid,在查询用户时,需要关联rose表,由于通过linq to sql 创建的实体类,所以无法通过linq to sql 类实体了,网上搜了些资料,没找到办法,后来自己想到了两个办法:

    (1)采用视图:即在数据库中再建一个user和rose的关联视图,然后通过linq tosql 实现此关联视图类及相应方法,此方法可行但是可能会遇到一个问题就是效率问题

    (2)第二个方法就是自己建一个类user_rose(在wcf服务中建),这个类放需要从user表和rose表关联的字段的相应的属性,然后在wcf服务中利用linq tosql 查询,查询语句如下:

               MonitorDataClassesDataContext     db = new MonitorDataClassesDataContext();
                var query = from t_User in db.t_User
                            join t_Rose in db.t_Rose on t_User.RoseID equals t_Rose.RoseID into t_Rose_join
                            from t_Rose in t_Rose_join.DefaultIfEmpty()
                            where
                              t_User.UserID == userid
                            select new UserRose
                            {
                                UserID= t_User.UserID,
                                UserName= t_User.UserName,
                                PWD= t_User.PWD,
                                RoseID= t_User.RoseID,
                                fdsz= t_User.fdsz,
                                CreateDate= t_User.CreateDate,
                                SJDLID= t_User.SJDLID,
                                RoseName = t_Rose.RoseName
                            };
                return query.ToList<UserRose>();

    经测试完全ok,这是采用wcf+ linq to sql 后遇到的第一个棘手的问题,把经验分享出来,供大家参考、指点,如果有更好的方法,望高手指点留言

  • 相关阅读:
    c++中函数参数传递(值传递、指针传递,引用传递)进一步认识
    时间比金钱金贵得多
    Difference between menu item types; Display, Output and Action in Dynamics Ax
    测试员,敢问路在何方
    C++中++i与i++
    C++中int转string与string转int
    美文共赏
    关于未来十年的思考
    T-SQL_面试题
    [eBook]Inside Microsoft Dynamics AX 2012 R3发布
  • 原文地址:https://www.cnblogs.com/riskyer/p/3370808.html
Copyright © 2011-2022 走看看