• 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 后遇到的第一个棘手的问题,把经验分享出来,供大家参考、指点,如果有更好的方法,望高手指点留言

  • 相关阅读:
    ubuntu-虚拟机跟主机资源共享的实现方法
    git- 仓库创建、修改、提交、撤销
    theme- 工作原理
    makeMtk- user 版本编译
    Button- 自定义控件添加自定义属性
    actionMode
    screen-Orientation 横竖屏设置
    worktools-mmx 添加编译模块
    eclipse- MAT安装及使用
    worktools-monkey 测试工具的使用
  • 原文地址:https://www.cnblogs.com/riskyer/p/3370808.html
Copyright © 2020-2023  润新知