当前位置: 网学 > 编程文档 > 其他类别 > 正文

分享基于EF+WCF的通用三层架构及解析

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/12

本项目结合EF 4.3及WCF实现了经典三层架构,各层面向接口,WCF实现SOA,Repository封装调用,在此基础上实现了WCFContext,动态服务调用及一个分页的实例。

1. 项目架构图:

498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' border="0" alt="" width="700" height="520" src="/uploadfile/201301/12/47123139714.jpg" /> 


2. 项目解决方案:

498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' border="0" alt="" src="/uploadfile/201301/12/8C123139917.jpg" />

  • 在传统的三层架构上增加了WcfService(服务端),WcfClientProxy(客户端服务调用),及WcfExtension(一些扩展)

 


3. Wcf Service的实现:

498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' border="0" alt="" src="/uploadfile/201301/12/56123139551.jpg" />

  • 工厂实现了RemoteServiceFactory(用于远程调用)和RefServiceFactory(本地引用调用服务层)生成客户端代理,都需要实现IServiceFactory的“IService CreateService();”
  • RemoteServiceFactory通过ChannelFactory动态产生客户端代理类IService,并将此对象进行缓存
  • WCFExtension实现了WCFContext,可传输用户登陆或IP上下文信息,以及拦截方法写Log的机制,具体可以参考 /uploadfile/201301/12/33123139794.jpg" /> 

    • 通过用来访问领域对象的一个类似集合的接口,在领域与数据映射层之间进行协调,将领域模型从客户代码和数据映射层之间解耦出来,具体实现代码:
    1. View Code   
    2.  public class DaoBase : IRepository, IDisposable  
    3.      {  
    4.          public DbContext context;  
    5.    
    6.          public DaoBase()  
    7.          {  
    8.              this.context = new EasyEF.DAL.DbContext();  
    9.          }  
    10.    
    11.          public T Update<T>(T entity) where T : class 
    12.          {  
    13.              var set = context.Set<T>();  
    14.              set.Attach(entity);  
    15.              context.Entry<T>(entity).State = EntityState.Modified;  
    16.              context.SaveChanges();  
    17.    
    18.              return entity;  
    19.          }  
    20.    
    21.          public T Insert<T>(T entity) where T : class 
    22.          {  
    23.              context.Set<T>().Add(entity);  
    24.              context.SaveChanges();  
    25.              return entity;  
    26.          }  
    27.    
    28.          public void Delete<T>(T entity) where T : class 
    29.          {  
    30.              context.Entry<T>(entity).State = EntityState.Deleted;  
    31.              context.SaveChanges();  
    32.          }  
    33.    
    34.          public T Find<T>(params object[] keyValues) where T : class 
    35.          {  
    36.              return context.Set<T>().Find(keyValues);  
    37.          }  
    38.    
    39.          public List<T> FindAll<T>(Expression<Func<T, bool>> conditions = null) where T : class 
    40.          {  
    41.              if (conditions == null)  
    42.                  return context.Set<T>().ToList();  
    43.              else 
    44.                  return context.Set<T>().Where(conditions).ToList();  
    45.          }  
    46.    
    47.          public PagedList<T> FindAllByPage<T, S>(Expression<Func<T, bool>> conditions, Expression<Func<T, S>> orderBy, int pageSize, int pageIndex) where T : class 
    48.          {  
    49.              var queryList = conditions == null ? context.Set<T>() : context.Set<T>().Where(conditions) as IQueryable<T>;  
    50.    
    51.              return queryList.OrderByDescending(orderBy).ToPagedList(pageIndex, pageSize);  
    52.          }  
    53.    
    54.          public void Dispose()  
    55.          {  
    56.              this.context.Dispose();  
    57.          } 

    4

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号