当前位置: 代码迷 >> .NET分析设计 >> nhibernate导致wcf 序列化的效率有关问题
  详细解决方案

nhibernate导致wcf 序列化的效率有关问题

热度:220   发布时间:2016-05-01 22:33:56.0
nhibernate导致wcf 序列化的效率问题
本帖最后由 jhonthomas 于 2014-02-14 11:19:27 编辑
最近在做一个项目,通过nhibernate访问数据库,之后通过wcf提供给用户使用,但是在序列化的时候发现效率太低,分析原因就是序列化的时候,由于实体类里面引用了其他类,导致序列化的时候需要花费更多的时间,举个例子:
[DataContract]
public class A

    private int id;
    [DataMember]
    private virtual int Id{get;set;}
      private int name;
    [DataMember]
    private virtual int Name{get;set;}
    
    private List<B> bClass;
    [DataMember]
    private virtual List<B> BClass {get;set;}



[DataContract]
public class B

    private int id;
    [DataMember]
    private virtual int Id{get;set;}
      private int name;
    [DataMember]
    private virtual int Name{get;set;}
   
    private A aClass;
    [DataMember]
    private virtual A AClass {get;set;}
    
    private B bClass;
    [DataMember]
    private virtual B BClass {get;set;}





[DataContract]
public class C

    private int id;
    [DataMember]
    private virtual int Id{get;set;}
      private int name;
    [DataMember]
    private virtual int Name{get;set;}
   
    private List<B> bClass;
    [DataMember]
    private virtual List<B> BClass {get;set;}

其中A、B、C三个类分别是通过O/RMap映射到数据库中的表
假如这个时候,通过wcf服务获取C类的一个实例,会发现在序列化的时候效率会很低。
请问如何解决?


------解决方案--------------------
什么年代的编程方式啊,在说WCF的序列化只有第一执行的时候会.
------解决方案--------------------
这段代码不太好,为什么都是private?另外有了propertie为什么还要有用私有变量?

在用Nhibernate的时候,如果你要引用其他的类,比如这里的C类引用B类,最好不要用List,可以试试IQueryable,这样可以在真正用到B类列表时才链接数据库。

NHibernate和WCF的配套使用有很多技巧,例如Session的管理,类的组织都有学问。如果需要可以用专用的dao类来通过ORM从数据库中取出原始数据,然后实例化你的domain类,从而提高系统性能。
------解决方案--------------------
楼主可以看看webapi,看看适合不适合你
  相关解决方案